package open.dolphin.letter; import com.lowagie.text.*; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.MessageFormat; import java.util.Date; import open.dolphin.client.ClientContext; import open.dolphin.helper.UserDocumentHelper; import open.dolphin.infomodel.UserModel; import open.dolphin.project.Project; /** * 紹介状の PDF メーカー。 * @author Kazushi Minagawa, Digital Globe, Inc. */ public class Reply1PDFMaker extends AbstractLetterPDFMaker { @Override public String create() { try { Document document = new Document( PageSize.A4, getMarginLeft(), getMarginRight(), getMarginTop(), getMarginBottom()); String DOC_TITLE = ClientContext.getMyBundle(Reply1PDFMaker.class).getString("title.replyLetter"); String path = UserDocumentHelper.createPathToDocument( getDocumentDir(), // PDF File を置く場所 DOC_TITLE, // 文書名 EXT_PDF, // 拡張子 model.getPatientName(), // 患者氏名 new Date()); // 日付 Path pathObj = Paths.get(path); setPathToPDF(pathObj.toAbsolutePath().toString()); // 呼び出し側で取り出せるように保存する PdfWriter.getInstance(document, Files.newOutputStream(pathObj)); document.open(); // Font baseFont = BaseFont.createFont(HEISEI_MIN_W3, UNIJIS_UCS2_HW_H, false); titleFont = new Font(baseFont, getTitleFontSize()); bodyFont = new Font(baseFont, getBodyFontSize()); // タイトル Paragraph para = new Paragraph(DOC_TITLE, titleFont); para.setAlignment(Element.ALIGN_CENTER); document.add(para); // 日付 String dateStr = getDateString(model.getStarted()); para = new Paragraph(dateStr, bodyFont); para.setAlignment(Element.ALIGN_RIGHT); document.add(para); document.add(new Paragraph(" ")); // 紹介元病院 Paragraph para2 = new Paragraph(model.getClientHospital(), bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); // 紹介元診療科 String dept = model.getClientDept(); if (dept == null || (dept.equals(""))) { para2 = new Paragraph(" ", bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); } else { if (!dept.endsWith(ClientContext.getMyBundle(Reply1PDFMaker.class).getString("text.dept"))) { dept = dept + ClientContext.getMyBundle(Reply1PDFMaker.class).getString("text.dept"); } para2 = new Paragraph(dept, bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); } // 紹介元医師 StringBuilder sb = new StringBuilder(); if (model.getClientDoctor()!=null) { sb.append(model.getClientDoctor()); sb.append(" "); } sb.append(ClientContext.getMyBundle(Reply1PDFMaker.class).getString("doctorTitle")); // title String title = Project.getString("letter.atesaki.title"); if (title!=null && (!title.equals("無し"))) { sb.append(" ").append(title); } para2 = new Paragraph(sb.toString(), bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); // // 紹介先病院 // para2 = new Paragraph(model.getConsultantHospital(), bodyFont); // para2.setAlignment(Element.ALIGN_RIGHT); // document.add(para2); // para2 = new Paragraph(model.getConsultantDoctor(), bodyFont); // para2.setAlignment(Element.ALIGN_RIGHT); // document.add(para2); document.add(new Paragraph(" ")); // 挨拶 String visitedDate = model.getItemValue(Reply1Impl.ITEM_VISITED_DATE); String informed = model.getTextValue(Reply1Impl.TEXT_INFORMED_CONTENT); String fmt = ClientContext.getMyBundle(Reply1PDFMaker.class).getString("messageFormat.patientVisit"); String text = new MessageFormat(fmt).format(new Object[]{ model.getPatientName(), getDateString(model.getPatientBirthday()), model.getPatientAge(), visitedDate }); para2 = new Paragraph(text, bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); document.add(new Paragraph(" ")); para2 = new Paragraph(informed, bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); document.add(new Paragraph(" ")); document.add(new Paragraph(" ")); sb = new StringBuilder(); sb.append(ClientContext.getMyBundle(Reply1PDFMaker.class).getString("greetings.letter")); para2 = new Paragraph(sb.toString(), bodyFont); para2.setAlignment(Element.ALIGN_LEFT); document.add(para2); // sb = new StringBuilder(); // sb.append("取り急ぎ返信まで。"); // para2 = new Paragraph(sb.toString(), bodyFont); // para2.setAlignment(Element.ALIGN_LEFT); // document.add(para2); document.add(new Paragraph(" ")); // 住所 UserModel user = Project.getUserModel(); String zipCode = user.getFacilityModel().getZipCode(); String address = user.getFacilityModel().getAddress(); sb = new StringBuilder(); sb.append(zipCode); sb.append(" "); sb.append(address); para2 = new Paragraph(sb.toString(), bodyFont); para2.setAlignment(Element.ALIGN_RIGHT); document.add(para2); // 電話 sb = new StringBuilder(); sb.append(ClientContext.getMyBundle(Reply1PDFMaker.class).getString("text.telephone")).append(" "); sb.append(user.getFacilityModel().getTelephone()); para2 = new Paragraph(sb.toString(), bodyFont); para2.setAlignment(Element.ALIGN_RIGHT); document.add(para2); // 差出人病院名 para2 = new Paragraph(model.getConsultantHospital(), bodyFont); para2.setAlignment(Element.ALIGN_RIGHT); document.add(para2); // 差出人医師 sb = new StringBuilder(); sb.append(model.getConsultantDoctor()); sb.append(" ").append(ClientContext.getMyBundle(Reply1PDFMaker.class).getString("text.seal")); para2 = new Paragraph(sb.toString(), bodyFont); para2.setAlignment(Element.ALIGN_RIGHT); document.add(para2); document.close(); return getPathToPDF(); } catch (IOException ex) { java.util.logging.Logger.getLogger(this.getClass().getName()).warning(ex.getMessage()); throw new RuntimeException(ERROR_IO); } catch (DocumentException ex) { java.util.logging.Logger.getLogger(this.getClass().getName()).warning(ex.getMessage()); throw new RuntimeException(ERROR_PDF); } } }