Mercurial > mercurial > hgweb_golang.cgi
comparison src/kaigo/Nk/nk.go @ 42:c58172a59534
bug fix.
author | pyon@macmini |
---|---|
date | Tue, 10 Mar 2020 21:12:29 +0900 |
parents | 34a474fb83c3 |
children | 17e042fc8a33 |
comparison
equal
deleted
inserted
replaced
41:34a474fb83c3 | 42:c58172a59534 |
---|---|
1 /* | 1 /* |
2 nk.go: Nintei Kekka | 2 nk.go: Nintei Kekka |
3 | 3 |
4 Last Change: 2020-01-24 金 09:18:04. | 4 Last Change: 2020-03-10 火 16:38:20. |
5 */ | 5 */ |
6 | 6 |
7 package main | 7 package main |
8 | 8 |
9 /* | 9 /* |
100 XDW_CloseDocumentHandle(h, NULL); | 100 XDW_CloseDocumentHandle(h, NULL); |
101 | 101 |
102 return (api_result >= 0); | 102 return (api_result >= 0); |
103 } | 103 } |
104 | 104 |
105 int xdwaddatn(const char* file, char* atnlist) { | 105 int xdwhbaddatn(const char* file, char* atnlist) { |
106 char in_path[_MAX_PATH]; | 106 char in_path[_MAX_PATH]; |
107 _fullpath(in_path, file, _MAX_PATH); | 107 _fullpath(in_path, file, _MAX_PATH); |
108 | 108 |
109 XDW_DOCUMENT_HANDLE h = NULL; | 109 XDW_DOCUMENT_HANDLE h = NULL; |
110 XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE}; | 110 XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE}; |
271 | 271 |
272 free(blk_path); | 272 free(blk_path); |
273 free(blk_path_addr); | 273 free(blk_path_addr); |
274 | 274 |
275 return 0; | 275 return 0; |
276 } | |
277 | |
278 int xdwerase(const char* in_file, const char* ktxt, const char* htxt) { | |
279 int x = 20000; | |
280 int y = 3685; | |
281 int sz = 480; | |
282 | |
283 char in_path[_MAX_PATH]; | |
284 _fullpath(in_path, in_file, _MAX_PATH); | |
285 | |
286 XDW_DOCUMENT_HANDLE h = NULL; | |
287 XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE}; | |
288 | |
289 int api_result = XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode); | |
290 if (api_result < 0) return api_result; | |
291 | |
292 XDW_DOCUMENT_INFO info = {sizeof(XDW_DOCUMENT_INFO), 0, 0, 0}; | |
293 XDW_GetDocumentInformation(h, &info); | |
294 | |
295 XDW_FOUND_HANDLE pFoundHandle = NULL; | |
296 for (int i = 0; i < info.nPages; i++) { | |
297 api_result = XDW_FindTextInPage(h, i + 1, htxt, NULL, &pFoundHandle, NULL); | |
298 if (pFoundHandle == NULL) continue; | |
299 | |
300 api_result = XDW_FindTextInPage(h, i + 1, ktxt, NULL, &pFoundHandle, NULL); | |
301 if (pFoundHandle == NULL) continue; | |
302 | |
303 XDW_ANNOTATION_HANDLE annoation; | |
304 int api_result = XDW_AddAnnotation(h, XDW_AID_TEXT, i + 1, x, y, NULL, &annoation, NULL); | |
305 if (api_result < 0) return api_result; | |
306 | |
307 api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_Text, XDW_ATYPE_STRING, " ", 0, NULL); | |
308 api_result = XDW_SetAnnotationAttribute(h, annoation, XDW_ATN_FontSize, XDW_ATYPE_INT, (char*)&sz, 0, NULL); | |
309 } | |
310 | |
311 XDW_SaveDocument(h, NULL); | |
312 XDW_CloseDocumentHandle(h, NULL); | |
313 | |
314 return 0; | |
276 } | 315 } |
277 | 316 |
278 int xdw2pdf(const char* xdwfile, const char* pdffile) { | 317 int xdw2pdf(const char* xdwfile, const char* pdffile) { |
279 char in_path[_MAX_PATH], out_path[_MAX_PATH]; | 318 char in_path[_MAX_PATH], out_path[_MAX_PATH]; |
280 _fullpath(in_path, xdwfile, _MAX_PATH); | 319 _fullpath(in_path, xdwfile, _MAX_PATH); |
344 "golang.org/x/text/encoding/japanese" | 383 "golang.org/x/text/encoding/japanese" |
345 "golang.org/x/text/transform" | 384 "golang.org/x/text/transform" |
346 ) | 385 ) |
347 | 386 |
348 var ( | 387 var ( |
349 ver = "0.1" | 388 ver = "0.2" |
350 | 389 |
351 flg_hb int | 390 flg_hb int |
352 flg_time bool | 391 flg_time bool |
353 flg_log bool | 392 flg_log bool |
354 flg_debug bool | 393 flg_debug bool |
366 start time.Time | 405 start time.Time |
367 | 406 |
368 hb string // 発番 | 407 hb string // 発番 |
369 fw, hs, kt = "", "", "kttemp.xdw" // 負担割合証, 被保険者証, 結果通知 | 408 fw, hs, kt = "", "", "kttemp.xdw" // 負担割合証, 被保険者証, 結果通知 |
370 | 409 |
371 step, totalstep = 1, 13 | 410 step, totalstep = 1, 14 |
372 ) | 411 ) |
373 | 412 |
374 type Annotation struct { | 413 type Annotation struct { |
375 X, Y int | 414 X, Y int |
376 Sz int | 415 Sz int |
570 step_start = print_time(step_start) | 609 step_start = print_time(step_start) |
571 | 610 |
572 /* MAKE SORT-TABEL */ | 611 /* MAKE SORT-TABEL */ |
573 print_step("並び順の決定") | 612 print_step("並び順の決定") |
574 | 613 |
575 re_hhs := regexp.MustCompile(`05((2126)|(2159)|(4346))0[1238]\d{8}`) | 614 re_hhs := regexp.MustCompile(`0[1238]\d{8}`) |
576 re_kaigo := regexp.MustCompile(`要((介護)|(支援)).`) | 615 re_kaigo := regexp.MustCompile(`要((介護)|(支援)).`) |
577 | 616 |
578 hash_fw := make(map[string]int) // 負担割合証発行者のハッシュ | 617 hash_fw := make(map[string]int) // 負担割合証発行者のハッシュ |
579 for _, t := range xdw2txt(fw) { | 618 for _, t := range xdw2txt(fw) { |
580 hash_fw[re_hhs.FindString(t)]++ | 619 hash_fw[re_hhs.FindString(t)]++ |
605 | 644 |
606 /* DO SORT */ | 645 /* DO SORT */ |
607 order := "" | 646 order := "" |
608 for _, s := range sorttable { | 647 for _, s := range sorttable { |
609 t := strings.Split(s, "#") | 648 t := strings.Split(s, "#") |
610 order += ":" + t[len(t)-1][6:] | 649 order += ":" + t[len(t)-1] |
611 } | 650 } |
612 order = strings.Replace(order, ":", "", 1) | 651 order = strings.Replace(order, ":", "", 1) |
613 | 652 |
614 print_step("被保険者証並び替え") | 653 print_step("被保険者証並び替え") |
615 hs_sorted := filepath.Join(tmpdir, "hs.xdw") | 654 hs_sorted := filepath.Join(tmpdir, "hs.xdw") |
624 print_step("結果通知並び替え") | 663 print_step("結果通知並び替え") |
625 kt_sorted := filepath.Join(tmpdir, "kt.xdw") | 664 kt_sorted := filepath.Join(tmpdir, "kt.xdw") |
626 C.xdwsort(C.CString(kt), C.CString(kt_sorted), C.CString(order), C.CString(tmpdir), C.CString("kt")) | 665 C.xdwsort(C.CString(kt), C.CString(kt_sorted), C.CString(order), C.CString(tmpdir), C.CString("kt")) |
627 step_start = print_time(step_start) | 666 step_start = print_time(step_start) |
628 | 667 |
629 /* ADD ANNOTATION */ | 668 /* ADD HATSUBAN */ |
630 print_step("発番印字") | 669 print_step("発番印字") |
631 al := strings.Join(conf.AnnotationList(), ":") | 670 al := strings.Join(conf.AnnotationList(), ":") |
632 al, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), al) | 671 al, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), al) |
633 C.xdwaddatn(C.CString(kt_sorted), C.CString(al)) | 672 C.xdwhbaddatn(C.CString(kt_sorted), C.CString(al)) |
673 step_start = print_time(step_start) | |
674 | |
675 /* ERASE HOUKATSU */ | |
676 print_step("包括除去") | |
677 ktxt, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), "要介護") | |
678 htxt, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), "包括支援センター") | |
679 C.xdwerase(C.CString(hs_sorted), C.CString(ktxt), C.CString(htxt)) | |
634 step_start = print_time(step_start) | 680 step_start = print_time(step_start) |
635 | 681 |
636 /* OPTIMIZE OUTPUT-FILE */ | 682 /* OPTIMIZE OUTPUT-FILE */ |
637 print_step("最適化") | 683 print_step("最適化") |
638 hs_opt := filepath.Join(outputdir, "hs.xdw") | 684 hs_opt := filepath.Join(outputdir, "hs.xdw") |
652 } | 698 } |
653 for i, s := range sorttable { | 699 for i, s := range sorttable { |
654 t := strings.Split(s, "#") | 700 t := strings.Split(s, "#") |
655 u := strings.ReplaceAll(t[1], ":", ",") | 701 u := strings.ReplaceAll(t[1], ":", ",") |
656 u, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), u) | 702 u, _, _ = transform.String(japanese.ShiftJIS.NewEncoder(), u) |
657 c := t[2][0:6] | 703 h := t[2] |
658 h := t[2][6:16] | |
659 n, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), hash_hhs[h]) | 704 n, _, _ := transform.String(japanese.ShiftJIS.NewEncoder(), hash_hhs[h]) |
660 // seq, city, hno, name, kaigo, fw, kyotaku | 705 // seq, hno, name, kaigo, fw, kyotaku |
661 fmt.Fprintf(fcsv, "%04d,%s,%s,%s,%s\n", i + 1, c, h, n, u) | 706 fmt.Fprintf(fcsv, "%04d,%s,%s,%s\n", i + 1, h, n, u) |
662 } | 707 } |
663 if err := fcsv.Close(); err != nil { | 708 if err := fcsv.Close(); err != nil { |
664 log.Fatal(err) | 709 log.Fatal(err) |
665 } | 710 } |
666 step_start = print_time(step_start) | 711 step_start = print_time(step_start) |