【发布时间】:2015-03-21 09:03:25
【问题描述】:
我需要使用 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 的默认文档字体,无法更改,这是默认情况下不嵌入的 Base PDF 字体,只有在我有 Helvetica pfb 或 ttf 时才能嵌入它文件(我没有也不想购买,因为我根本不打算在我的文档中使用该字体)。
我的 PDF 中根本不需要任何 Helvetica 文本。我需要生成 PDF/A-1b,它需要嵌入所有字体,包括 PDF Base Fonts。
那么这是一个错误吗?如果没有可用的 Helvetica 字体文件,使用 iText 生成 PDF/A 的正确方法是什么?
【问题讨论】:
-
这是正常行为。如果您无法将字体添加到 pdf 中,只需替换该字体即可。
-
我怀疑您没有注册字体,FontFactory 返回的是恰好是 Helvetica 的默认字体。