C# 当创建PDF/a文件时,我得到一个错误:“quot;“未嵌入Helvetica”;

C# 当创建PDF/a文件时,我得到一个错误:“quot;“未嵌入Helvetica”;,c#,itext,C#,Itext,我正在使用.NET的iText,我得到一个带有消息的PdfAConformanceException: “必须嵌入所有字体。此字体不是:Helvetica” 如何嵌入Helvetica 这是我的密码 static void Main(string[] args) { ConverterProperties properties = new ConverterProperties(); properties.SetBaseUri(null); PdfWriter writer =

我正在使用.NET的iText,我得到一个带有消息的
PdfAConformanceException

“必须嵌入所有字体。此字体不是:Helvetica”

如何嵌入Helvetica

这是我的密码

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);
}
static void Main(字符串[]args)
{
ConverterProperties属性=新ConverterProperties();
SetBaseUri(null);
PdfWriter writer=新的PdfWriter(“hello.pdf”);
PdfADocument pdf=新的PdfADocument(writer,
PdfAConformanceLevel.PDF_A_3A,新的pdfoutputinetent(“自定义”),“http://www.color.org“,“sRGB IEC61966-2.1”,新StreamReader(INTENT.BaseStream));
pdf.settaged();
var html=@”
我的第一个标题
我的第一段

"; ConvertToPdf(html,pdf,properties); }
请更具体地阅读

我引述:

创建用于长期保存的PDF,第1部分 ISO 19005第1部分于2005年发布。它被定义为一个子集 Adobe PDF规范1.4版(当时, 还不是ISO标准)。ISO 19005-1引入了一系列 义务和限制:

  • 文档需要是自包含的:所有字体都需要 嵌入的不允许使用外部电影、声音或其他二进制文件
  • 文档需要在可扩展元数据中包含元数据 平台(XMP)格式:ISO 16684(XMP)描述了如何嵌入XML 元数据转换成二进制文件,这样软件就不知道如何 解释二进制数据格式仍然可以提取文件的 元数据
  • 不允许使用不适合未来的功能:PDF不能 包含任何JavaScript且可能未加密
您正面临字体未嵌入的问题。这是因为您没有提供字体程序。iText附带了14种标准Type1字体的字体度量(版本中有14个AFM文件)。这些字体应该是每个PDF查看器都知道的。如果你真的想使用Helvetica,你需要提供字体二进制文件(PFB文件)这些文件不能随iText一起提供,因为这些文件是专有文件。如果要使用这些文件,需要从字体所有者处购买许可证

我假设您的问题是错误的:“如何嵌入Helvetica?”即:您不想购买所需的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要求。您将在上的教程中了解有关这些要求的更多信息。

购买Helvetica许可证。iText仅随附AFM文件,因为PFB文件是专有文件。或者阅读文档,学习如何使用其他字体(如Open SAN),这样就不必购买字体使用许可证。另外:您正在使用哪个版本的iText。由于这个问题是一个新手问题,我假设您刚刚开始使用iText,因此您可能正在使用最新版本,即iText 7。我将提供一个iText 7答案。适用于所有我可以尝试的字体,我没有收到任何错误消息。可能是您设置字体的方式错误。不@frank,即使您将Helvetica的
embedded
参数发送到
true
,该字体也不会嵌入,因为Helvetica的PFB文件丢失。这已经被反复解释过了。请参阅链接中的“标准类型1字体”一节。Helvetica作为标准类型1字体包含在链接中,这是否意味着不需要添加类似Helvetica的字体?引用:“最后一句话中的“应”表示在创建PDF文档时不必嵌入这些字体”如果要创建符合ISO 32000的PDF文件,则无需嵌入Helvetica。但是,如果您希望创建符合ISO 19005(又名PDF/a)的PDF文件,则应嵌入所有字体。你不应该把ISO 32000和ISO 19005混淆。我编辑了我的公开文章。我正在尝试将html转换为PDF/a-3。如何设置ConvertToPdf方法的自由字体?您拒绝阅读有什么问题?中有一个PDF/a示例,中讨论了字体。还有:是什么让你认为你可以突然改变一个已经得到充分回答的问题的范围?一个新问题需要一个新帖子!以你的方式改变一个问题是不可能的。你这样做是在限制你自己得到答案的机会,因为人们看到一个iText问题,他们看到iText的原始作者回答了这个问题,他们说:好的,然后我们就不必再看答案了,因为Bruno已经回答了。当我们需要使用
FontProvider
从HTML+CSS创建PDF/A时,如何做到这一点?