创建PDF/A-1b而不需要Helvetica字体文件

创建PDF/A-1b而不需要Helvetica字体文件,pdf,fonts,itext,pdfa,Pdf,Fonts,Itext,Pdfa,我需要使用iText创建一些简单但符合PDF/A-1b的PDF文件 我的第一种方法如下所示: Document document = new Document(Pagesize.A4); ByteArrayOutputStream pdfBuffer = new ByteArrayOutputStream); PdfAWriter pdfAWriter = PdfAWriter.geInstance (document, pdfBuffer, PdfAConformanceLevel

我需要使用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());
Thos代码生成一条错误消息:

所有字体都必须嵌入。这个不是:Helvetica

环顾四周,我发现Helvetica是iTextn的默认文档字体,无法更改,这是一种基本PDF字体,默认情况下不嵌入,只有在我有Helvetica pfb或ttf文件(我没有,也不想购买,因为我根本不打算在文档中使用该字体)的情况下,我才能嵌入它.

在我的PDF中根本不需要任何Helvetica文本。我需要生成PDF/A-1b,它需要嵌入所有字体,包括PDF基本字体


这是一个Bug吗?如果没有可用的Helvetica字体文件,使用iText生成PDF/a的正确方法是什么

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

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

这是我的第二个反应:你不是在使用Courier New这一行不够:

Font fixedFont = FontFactory.getFont("Courier New", BaseFont.CP1252, BaseFont.EMBEDDED, 10, Font.NORMAL);
我没有看到你在任何地方注册
courier.ttf
。因此,iText不知道在哪里可以找到新的Courier。它使用Helvetica代替。当我查阅(一本我极力推荐的书)时,我发现以下问题:


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

这是正常行为。如果您无法将字体添加到pdf中,只需替换该字体。我怀疑您尚未注册字体,FontFactory返回的是碰巧为Helvetica的默认字体。您可以看看这个问题吗?是否可以提供一个示例代码片段来解决此问题?