5

iText ライブラリを使用して、既存の PDF ファイルに追加情報をスタンプしています。追加情報は、カスタム TTF フォントでレンダリングする必要があるテキストです。

問題は、テキストが Adob​​e Reader でのみ表示されないことです。Ubuntu のデフォルトの eVince リーダーや Google オンライン PDF リーダーなどの他の PDF ビューアーは、スタンプされたテキストをカスタム埋め込みフォントで適切にレンダリングします。

Cp1251、BaseFont.Identity_Hなど、複数のエンコーディングを試しました...

魔法が起こるコード:

PdfReader pdfReader = new PdfReader(new FileInputStream(inputPdf));
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("stamped.pdf"));
PdfContentByte canvas = pdfStamper.getOverContent(1);
String text = "The stamp";
BaseFont bf = BaseFont.createFont("assign.ttf", "Cp1251",BaseFont.EMBEDDED);
canvas.beginText();
canvas.setColorFill(BaseColor.BLUE);
canvas.setFontAndSize(bf, 13);
canvas.moveText(310, 600);
canvas.showText(text);
pdfStamper.close();
4

1 に答える 1

5

構文に問題があります。PDF のテキスト状態は と でマークされBTますET。これらの演算子は、 メソッドbeginText()endText()メソッドを使用して追加されます。はありますが、BTありませんET。Adobe Reader は他のビューアーよりも厳密です (これが、私が他のすべてのビューアーよりも Adob​​e Reader を好む理由です。コードを書くときは、構文を尊重する必要があります)。

前に次の行を追加しますpdfStamper.close();

canvas.endText();

さらに良いことに、私の本を読むと、 を使用してコードの複雑さを軽減できることがわかりますColumnText.showTextAligned()

于 2012-11-21T13:58:56.120 に答える