我正在使用iText for .NET,我收到一条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);
}
答案 0 :(得分:1)
请阅读iText 7 Jump-start tutorial,更具体地说,Chapter 7: Creating PDF/UA and PDF/A documents!
我引用:
创建用于长期保存的PDF,第1部分
ISO 19005的第1部分于2005年发布。它被定义为子集 Adobe PDF版规范的1.4版本(当时, 还不是ISO标准)。 ISO 19005-1推出了一系列 义务和限制:
- 文档需要自包含:所有字体都需要 嵌入式;不允许使用外部电影,声音或其他二进制文件。
- 该文档需要包含可扩展元数据中的元数据 平台(XMP)格式: ISO 16684(XMP)描述了如何嵌入XML 元数据转换成二进制文件,使软件不知道如何 解释二进制数据格式仍然可以提取文件的 元数据。
- 不允许使用非面向未来的功能: PDF不能 包含任何JavaScript,可能不加密。
您遇到的问题是未嵌入字体。这是因为您没有提供字体程序。 iText附带14 标准Type 1字体的字体指标(该版本中有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一致性的第一步。它将解决您在问题中描述的问题。但是,由于您没有在您的问题中共享任何代码(这违反了Stack Overflow的规则),我假设您缺少大量其他PDF / A要求。您将在official web site上的教程中发现有关这些要求的更多信息。