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.util.Date;
import open.dolphin.client.ClientContext;
import open.dolphin.helper.UserDocumentHelper;
import open.dolphin.project.Project;
/**
* 紹介状の PDF メーカー。
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public class LetterPDFMaker extends AbstractLetterPDFMaker {
private static final int ADDRESS_FONT_SIZE = 9;
@Override
public String create() {
try {
Document document = new Document(
PageSize.A4,
getMarginLeft(),
getMarginRight(),
getMarginTop(),
getMarginBottom());
String DOC_TITLE = ClientContext.getMyBundle(LetterPDFMaker.class).getString("title.refferalLeter");
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());
Font addressFont = new Font(baseFont, ADDRESS_FONT_SIZE);
// タイトル
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.getConsultantHospital(), bodyFont);
para2.setAlignment(Element.ALIGN_LEFT);
document.add(para2);
// 紹介先診療科
para2 = new Paragraph(model.getConsultantDept(), bodyFont);
para2.setAlignment(Element.ALIGN_LEFT);
document.add(para2);
// 紹介先医師
StringBuilder sb = new StringBuilder();
if (model.getConsultantDoctor()!= null) {
sb.append(model.getConsultantDoctor());
sb.append(" ");
}
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("doctorTitle")).append(" ");
// 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.getClientHospital(), bodyFont);
para2.setAlignment(Element.ALIGN_RIGHT);
document.add(para2);
// // 紹介元診療科
// para2 = new Paragraph(model.getCl, bodyFont);
// para2.setAlignment(Element.ALIGN_RIGHT);
// document.add(para2);
// 紹介元医師
sb = new StringBuilder();
sb.append(model.getClientDoctor());
sb.append(" ").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.seal"));
para2 = new Paragraph(sb.toString(), bodyFont);
para2.setAlignment(Element.ALIGN_RIGHT);
document.add(para2);
// masuda 紹介元住所 稲葉先生のリクエスト 郵便番号を含める^
sb = new StringBuilder();
String clientZip = model.getClientZipCode();
if (clientZip != null && !clientZip.isEmpty()) {
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("mark.zipCode"));
sb.append(clientZip);
sb.append(" ");
}
sb.append(model.getClientAddress());
para2 = new Paragraph(sb.toString(), addressFont);
para2.setAlignment(Element.ALIGN_RIGHT);
document.add(para2);
// para2 = new Paragraph(model.getClientAddress(), bodyFont);
// para2.setAlignment(Element.ALIGN_RIGHT);
// document.add(para2);
// masuda 紹介元電話番号 稲葉先生のリクエスト Faxを含める^
sb = new StringBuilder();
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.telephone"));
sb.append(model.getClientTelephone());
String fax = model.getClientFax();
if (fax != null && !fax.isEmpty()) {
sb.append(" ").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.fax"));
sb.append(fax);
}
para2 = new Paragraph(sb.toString(), addressFont);
para2.setAlignment(Element.ALIGN_RIGHT);
document.add(para2);
// sb = new StringBuilder();
// sb.append("電話 ");
// sb.append(model.getClientTelephone());
// para2 = new Paragraph(sb.toString(), bodyFont);
// para2.setAlignment(Element.ALIGN_RIGHT);
// document.add(para2);
//
// // 紹介元FAX番号
// if (model.getClientFax()!=null) {
// sb = new StringBuilder();
// sb.append("FAX ");
// sb.append(model.getClientFax());
// para2 = new Paragraph(sb.toString(), bodyFont);
// para2.setAlignment(Element.ALIGN_RIGHT);
// document.add(para2);
// }
document.add(new Paragraph(" "));
// 紹介挨拶
if (Project.getBoolean("letter.greetings.include")) {
String GREETINGS = ClientContext.getMyBundle(LetterPDFMaker.class).getString("greetings.letter");
para2 = new Paragraph(GREETINGS, bodyFont);
para2.setAlignment(Element.ALIGN_CENTER);
document.add(para2);
}
// 患者
Table pTable = new Table(4);
pTable.setPadding(2);
int width[] = new int[]{20, 60, 10, 10};
pTable.setWidths(width);
pTable.setWidth(100);
String birthday = getDateString(model.getPatientBirthday());
String sexStr = getSexString(model.getPatientGender());
pTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.patinetName"), bodyFont));
pTable.addCell(new Phrase(model.getPatientName(), bodyFont));
pTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.patientGender"), bodyFont));
pTable.addCell(new Phrase(sexStr, bodyFont));
pTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.birthDate"), bodyFont));
sb = new StringBuilder();
sb.append(birthday).append(" ").append("(");
sb.append(model.getPatientAge());
sb.append(" ").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.age")).append(")");
Cell cell = new Cell(new Phrase(sb.toString(), bodyFont));
cell.setColspan(3);
pTable.addCell(cell);
//document.add(pTable);
// 稲葉先生のリクエスト 患者住所と電話番号を含める
//s.oh^ 2013/11/26 文書の電話出力対応
if(Project.getBoolean(Project.LETTER_TELEPHONE_OUTPUTPDF)) {
//s.oh$
pTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.addressAndTelephone"), bodyFont));
}else{
pTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.address"), bodyFont));
}
sb = new StringBuilder();
// LetterModelには住所などは含まれていないのでChartから取得する-> X
try {
String zipCode = model.getPatientZipCode();
if (zipCode != null && !"".equals(zipCode)) {
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("mark.zipCode"));
sb.append(zipCode);
sb.append(" ");
}
String address = model.getPatientAddress();
if (address != null && !"".equals(address)) {
address = address.replace(" ", "");
sb.append(address);
}
//s.oh^ 2013/11/26 文書の電話出力対応
if(Project.getBoolean(Project.LETTER_TELEPHONE_OUTPUTPDF)) {
//s.oh$
String telephone = model.getPatientTelephone();
if (telephone != null && !"".equals(telephone)) {
sb.append(" ").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.telephone"));
sb.append(telephone);
}
}
cell = new Cell(new Phrase(sb.toString(), bodyFont));
cell.setColspan(3);
pTable.addCell(cell);
} catch (NullPointerException e) {
}
document.add(pTable);
// 紹介状内容
String disease = model.getItemValue(LetterImpl.ITEM_DISEASE);
String purpose = model.getItemValue(LetterImpl.ITEM_PURPOSE);
String pastFamily = model.getTextValue(LetterImpl.TEXT_PAST_FAMILY);
String clinicalCourse = model.getTextValue(LetterImpl.TEXT_CLINICAL_COURSE);
String medication = model.getTextValue(LetterImpl.TEXT_MEDICATION);
String remarks = model.getItemValue(LetterImpl.ITEM_REMARKS);
Table lTable = new Table(2); //テーブル・オブジェクトの生成
lTable.setPadding(2);
width = new int[]{20, 80};
lTable.setWidths(width); //各カラムの大きさを設定(パーセント)
lTable.setWidth(100);
lTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.dicease"), bodyFont));
lTable.addCell(new Phrase(disease, bodyFont));
lTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.purpose"), bodyFont));
lTable.addCell(new Phrase(purpose, bodyFont));
sb = new StringBuilder();
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.pastIllness")).append("\n").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.familyHistory"));
lTable.addCell(new Phrase(sb.toString(), bodyFont));
cell = new Cell(new Phrase(pastFamily, bodyFont));
lTable.addCell(cell);
sb = new StringBuilder();
sb.append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.presentIllness")).append("\n").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.testResult")).append("\n").append(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.progressNote"));
lTable.addCell(new Phrase(sb.toString(), bodyFont));
lTable.addCell(new Phrase(clinicalCourse, bodyFont));
lTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.presentMedication"), bodyFont));
lTable.addCell(new Phrase(medication, bodyFont));
lTable.addCell(new Phrase(ClientContext.getMyBundle(LetterPDFMaker.class).getString("text.remarks"), bodyFont));
lTable.addCell(new Phrase(remarks, bodyFont));
document.add(lTable);
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);
}
}
}