2

iTextを使用して、シンプルだがPDF/A-1b準拠のPDFファイルを作成する必要があります。

私の最初のアプローチは次のようになります。

Document document = new Document(Pagesize.A4); 
ByteArrayOutputStream pdfBuffer = new ByteArrayOutputStream); 

PdfAWriter pdfAWriter 
  = PdfAWriter.geInstance (document, pdfBuffer, PdfAConformanceLevel.PDFA_1B);
pdfAWriter.createXmpMetadata();

Font fixedFont = FontFactory.getFont("Courier New", BaseFont.CP1252, BaseFont.EMBEDDED, 10, Font.NORMAL); 

document.open();

Chunk chunk = new Chunk("Hello World", fixedFont);
Paragraph paragraph = new Paragraph(chunk); 
document.add(paragraph);  

document.close();

// this is pseudo code to transfer the Buffer to a real file
writeByteArrayToFile(pdfBuffer.toByteArray());

このコードは、次のエラー メッセージを生成します。

すべてのフォントを埋め込む必要があります。これは違います: Helvetica

周りを見回すと、Helvetica は変更できない iTextn のデフォルトのドキュメント フォントであり、これはデフォルトでは埋め込まれていないベース PDF フォントであり、Helvetica pfb または ttf ファイル (これはドキュメントでそのフォントをまったく使用する予定がないため、持っていませんし、購入するつもりもありません)。

PDF に Helvetica テキストはまったく必要ありません。PDF ベース フォントを含むすべてのフォントを埋め込む必要がある PDF/A-1b を生成する必要があります。

これはバグですか?Helvetica Fontファイルが利用できない場合、iTextでPDF/Aを生成する正しい方法は何ですか?

4

1 に答える 1

1

私の最初の反応は、@rekire のコメントと同じです。これは非常に奇妙な質問です。PDF/A ファイルの必須要件の 1 つは、すべてのフォントを埋め込むことです。ここで、Helvetica などのフォントを埋め込んでいない PDF/A ドキュメントを求めています。それはテキストのないドキュメントになります。

あなたはこの反応に応答しませんでしたが、次のような応答が考えられます: 私のコードを見ると、私が Helvetica を使用していないことがはっきりとわかります"Courier New"。Courier New を使用する場合、なぜ Helvetica が必要なのですか?

これが私の 2 番目の反応です。Courier New を使用していません。この行は十分ではありません:

Font fixedFont = FontFactory.getFont("Courier New", BaseFont.CP1252, BaseFont.EMBEDDED, 10, Font.NORMAL);

courier.ttfどこにも登録している様子がありません。したがって、iText は Courier New を見つける場所を知りません。代わりに Helvetica を使用します。StackOverflow の The Best iText Questions (私が強くお勧めできる本)を参照すると、次の質問が見つかります。

これらの質問に対する答えは、あなたの例で何がうまくいかないかを説明しています。公式の iText サイトのサンドボックスに完全な PDF/A の例がいくつかあることに注意してください。

于 2015-01-22T15:10:38.573 に答える