PDFBox를 사용하여 기존 PDF 템플릿에서 문서를 작성하므로 파일을 열고 텍스트를 추가 한 다음 저장합니다. 그것은 외부 TTF 글꼴을 사용하려고 할 때를 제외하고는 잘 동작합니다. 나는 여러 가지 일을 시도해 보았지만 해결책을 찾는데 2 일을 보냈지 만 PDFBox에는 그다지 많은 것이 없습니다.PDFBox 내장 TTF 글꼴이 작동하지 않습니다.
"Tardy Kid" 글꼴은 다른 것으로 오인 할 수 없으며 어떤 표준 라이브러리에도 속하지 않으므로 일부 코드가 있습니다.
코드가 잘 실행되고 println의 "TardyKid"가 표시되고 (글꼴이로드되고 이름이 gettable임을 나타냄) 텍스트가 표시되지만 Helvetica에 있습니다. 너비를 계산하기 위해 getStringWidth()
을 사용하는보다 정교한 코드 부분도 너비 테이블로드에 성공한 것 같습니다. 단지 올바르게 표시되지 않습니다.
코드는 기존 PDF 문서 (템플릿)를 열고 텍스트를 추가하는 큰 프로그램의 컨텍스트에서 실행됩니다. 그것은 모두를 제외하고 잘 작동하는 것 같습니다
public void setText (PDDocument document, String text) throws IOException {
int lastPage = document.getNumberOfPages() - 1;
PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(lastPage);
PDPageContentStream contentStream = null;
try {
contentStream = new PDPageContentStream(document,page,true,true,false);
File fontFile = new File(m_fontDir, "Tardy_Kid.ttf");
PDFont font = PDTrueTypeFont.loadTTF(document, fontFile);
Color color = new Color(196, 18, 47);
float x = 100f, y = 700f;
System.out.println(font.getBaseFont());
contentStream.setFont(font, 32);
contentStream.setNonStrokingColor(color);
contentStream.beginText();
contentStream.moveTextPositionByAmount(x,y);
contentStream.drawString(text);
contentStream.endText();
} finally {
if (contentStream != null) {
contentStream.close();
}
}
}
추가 테스트시, 다른 텍스트에 대해이 후에 SetFont를 다시 호출하면 문제가 발생하는 것 같습니다. 모든 텍스트가 마지막 글꼴 세트로 되돌아갑니다. 하나의 텍스트 또는 여러 글꼴을 같은 글꼴 (Tardy Kid)로 설정하면 작동합니다. –