当创建一个PDF / A文件,我得到了错误:“黑体未嵌入”(When creating a PDF/

2019-10-29 23:05发布

我使用iText的用于.NET和我得到一个PdfAConformanceException与消息:

“所有的字体都必须嵌入这个人是不是:黑体”

如何能够将黑体?

这是我的代码

static void Main(string[] args)
{
   ConverterProperties properties = new ConverterProperties();
   properties.SetBaseUri(null);
   PdfWriter writer = new PdfWriter("hello.pdf");    

   PdfADocument pdf = new PdfADocument(writer, 
   PdfAConformanceLevel.PDF_A_3A, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", new StreamReader(INTENT).BaseStream));                   

   pdf.SetTagged();

   var html = @"<!DOCTYPE html>
                <html>
                   <body>
                      <h1>My First Heading</h1>
                      <p>My first paragraph.</p>
                   </body>
                </html>
              ";

  HtmlConverter.ConvertToPdf(html, pdf, properties);
}

Answer 1:

请阅读iText的7跳转入门教程 ,更具体第7章:创建PDF / UA和PDF / A文件 !

我引用:

创建PDF进行长期保存,第1部分

ISO 19005的第一部分于2005年发布。它被定义为Adobe的PDF规范1.4版的一个子集(其中,在那个时候,是不是ISO标准还)。 ISO 19005-1出台了一系列的义务和限制:

  • 该文件必须是自包含的:所有字体需要嵌入; 外部电影,声音或其他二进制文件是不允许的。
  • 该文件需要包含在扩展元数据平台(XMP)元数据格式:ISO 16684(XMP)介绍如何嵌入XML元数据转换成二进制文件,这样的软件,不知道如何解释二进制数据格式仍然可以提取文件的元数据。
  • 未面向未来是不允许的功能:在PDF中不能包含任何JavaScript和不被加密。

你面对的字体没有嵌入的问题。 这是因为你没有提供的字体方案。 iText的附带的14种标准类型1字体的字体规格(有在释放14个AFM文件)。 这些都是应该由每一个PDF浏览器被称为字体。 如果你真的想用黑体,您需要提供的字体二进制文件(PFB文件)。 这些不能与iText的出货,因为这些文件是专有的。 你需要从字体的所有者购买许可证,如果你想使用它们。

我假设你的问题是错误的:“如何能够将黑体” 那就是:你不想购买所需的PFB文件。 作为替代,你可以使用免费的字体作为将在本教程完成:

public const String FONT = "resources/font/FreeSans.ttf";
PdfFont font = PdfFontFactory.CreateFont(FONT, PdfEncodings.WINANSI, true);
Paragraph p = new Paragraph()
    .SetFont(font).Add(new Text("Text with embedded font."));

这是对PDF / A规范的第一步。 这将解决你在你的问题说明问题。 但是,当你不同意你的问题中的任何代码(这违背堆栈溢出的规则),我假设你缺少很多其他的PDF / A的要求。 你会发现更多的在辅导这些要求的官方网站 。



文章来源: When creating a PDF/A file, I get the error: “Helvetica is not embedded”
标签: c# itext