PDFBox を使用して既存の PDF テンプレートからドキュメントを作成しているため、ファイルを開き、テキストを追加して保存します。外部 TTF フォントを使用しようとする場合を除いて、これはうまく機能します。私はさまざまなことを試し、解決策を2日間検索しましたが、PDFBoxにはあまりありません。
これは、フォント「Tardy Kid」を使用したコードです。これは、他のものと間違われることがなく、標準ライブラリの一部である可能性が低いためです。
コードは正常に実行され、println から "TardyKid" が表示され (フォントが読み込まれ、名前が取得可能であることを示します)、テキストが表示されますが、それは 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();
}
}
}