【问题标题】:creating PDF/A-1b without needing a Helvetica Font file无需 Helvetica 字体文件即可创建 PDF/A-1b
【发布时间】: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 的默认字体。
  • 能不能看一下问题stackoverflow.com/q/52736441/3169868

标签: pdf fonts itext pdfa


【解决方案1】:

我的第一反应与@rekire 的评论一致:这是一个非常奇怪的问题。 PDF/A 文件的一项必要要求是嵌入每种字体。现在您要的是不嵌入诸如 Helvetica 之类的字体的 PDF/A 文档。那将是一个没有任何文本的文档。

您没有对此反应作出回应,但可能的答复是:如果您查看我的代码,您会清楚地看到我没有使用 Helvetica,我使用的是"Courier New"。如果我使用 Courier New,为什么还需要 Helvetica?

这是我的第二反应:你没有使用Courier New!这行是不够的:

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

我没有看到你在任何地方注册courier.ttf。因此 iText 不知道在哪里可以找到 Courier New。它使用 Helvetica 代替。当我咨询The Best iText Questions on StackOverflow(我强烈推荐的一本书)时,我发现了以下问题:

这些问题的答案解释了您的示例中出了什么问题。请注意,您可以在 iText 官方网站的sandbox 中找到一些完整的 PDF/A 示例。

【讨论】:

  • 能否提供示例代码 sn-p 来解决此问题?
猜你喜欢
  • 2021-08-14
  • 2013-10-18
  • 1970-01-01
  • 2016-07-18
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多