使用PDF/A或PDF/UA

PDF/A和PDF/UA格式规定了与文档内容相关的几个要求,这些要求在从Word格式的文档自动转换为PDF期间无法满足。 这些要求应在转换前在Word文档中或转换后在PDF文档中进行验证和更正,以便生成完全符合PDF/A和PDF/UA的文档。

基本要求是PDF/A和PDF/UA文档的结构或字体,我们将在以下部分中考虑这些要求。

文档结构要求

目前的要求是PDF/A-1a, PDF/A-2a, PDF/A-4, 和PDF/UA-1格式。

在转换为各种PDF格式标准时,Aspose.Words的工作方式有一些细微差别。 如果你想得到预期的结果,必须考虑到它们。

下面的小节描述了Aspose.Words在转换为各种PDF格式标准及其解决方案的选项时如何工作的细微差别。

结构类型

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1 tick

PDF文档是一个块的序列,如标题、段落、表格和其他. 这些块形成一个文档结构–强或弱。

强结构和弱结构对PDF/A都有效。 Microsoft Word文档在设计上有一个弱结构,Aspose.Words分别用弱结构创建PDF,并根据源文档中段落的大纲级别生成标题。

对于具有弱结构的PDF/UA-1文档,还需要标题编号按顺序无间隙。

为了确保正确的输出,用户必须确保源文档内容被正确组织,并为段落正确指定大纲级别。 否则,用户应该验证并修复输出PDF文档的结构。

将内容标记为工件

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1 tick

目前,Aspose.Words将页眉和页脚,注释分隔符,重复的表头单元格和装饰图像标记为工件。 请注意,此列表可能会在未来更新。

如果文档包含应标记为工件的任何其他内容,或者任何人工内容是真实内容,客户应在输出PDF中修复该内容。

自然语言规范

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1 tick

文本语言在Microsoft Word文档中指定。 Aspose.Words将指定的语言导出到输出PDF,Lang属性附加到标记内容序列或Span标记–它由ExportLanguageToSpanTag属性控制。 通常,当用户通过Microsoft Word输入文本时,没有语言问题。 但是,如果文本是自动生成的,则语言可能不准确。

图标题

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-2a
PDF/UA-1 tick

Microsoft Word文档允许用户添加图形标题。

目前Aspose.Words无法导出带有Caption标签的字幕,因此必须在输出PDF中标记它们。

替代描述

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1 tick

Microsoft Word文档允许用户向图像、形状和表格添加替代文本。 Aspose.Words将这样的替代文本导出到输出PDF。

超链接的替代描述

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-2a
PDF/UA-1 tick

除了前一点,Microsoft Word文档还允许用户向超链接添加替代文本。 Aspose.Words将这样的替代文本导出到输出PDF。

不幸的是,并非每个应用程序都允许您设置备用描述。 例如,Adobe Acrobat当前不允许为超链接设置此类描述。 但在Microsoft Word中,您可以按如下方式执行此操作:

alternate-descriptions-hyperlinks-mw

有时存在一个问题,即无法通过Microsoft WordGUI在内容列表(TOC)中为自动生成的超链接设置alt文本。 Aspose.Words可以更新这些字段并自行生成链接。

按照代码示例使用Aspose.Words文档对象模型(DOM)更新TOC字段:

auto doc = MakeObject<Document>(filename);
auto tocHyperLinks = doc->get_Range()->get_Fields()->
    LINQ_Where([](SharedPtr<Field> f) {return f->get_Type() == FieldType::FieldHyperlink; })->            
    LINQ_Where([](SharedPtr<FieldHyperlink> f) { return f->get_DisplayResult().StartsWith(u"#_Toc"); });

for (const auto& link : tocHyperLinks)
    link->set_ScreenTip(link->get_DisplayResult());

auto opt = MakeObject<PdfSaveOptions>();
opt->set_Compliance(PdfCompliance::PdfUa1);
opt->set_DisplayDocTitle(true);
opt->set_ExportDocumentStructure(true);
opt->get_OutlineOptions()->set_HeadingsOutlineLevels(3);
opt->get_OutlineOptions()->set_CreateMissingOutlineLevels(true);

auto outFile = filename.substr(0, filename.find_last_of('.')) + "_aw.pdf";
doc->Save(outFile, opt);

表头

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-2a
PDF/UA-1 tick

PDF/UA-1文档中的表必须具有标题–列、行或两者兼而有之。 PDF/A只需要标准表标记,没有额外的限制。 请注意,Aspose.Words会自动生成标准表标记。

替换文本

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1

Microsoft Word文档不允许用户设置替换文本。 所以这需要在输出PDF中进行验证和修复:

AcrobatReplacementText

缩写和首字母缩写扩展

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-2a tick
PDF/UA-1

Microsoft Word文档不允许用户设置缩写和首字母缩写扩展。 所以这需要在输出PDF中进行验证和修复:

AcrobatSplitAddExpansionText

文件标题

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-2a
PDF/A-4
PDF/UA-1 tick
PDF/UA-1中的文档应该有标题。

字体要求

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-1b tick
PDF/A-2a tick
PDF/A-2b tick
PDF/A-4 tick
PDF/UA-1 tick

在转换为PDF/A-1, PDF/A-2, PDF/A-4 或PDF/UA-1格式使用Aspose.Words。 如果要避免输出文档可能出现的问题,则必须将它们考虑在内。

下面的部分描述了这些细微差别及其解决方案的选项。

字体法律要求

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a tick
PDF/A-1b tick
PDF/A-2a tick
PDF/A-2b tick
PDF/A-4 tick
PDF/UA-1 tick

Aspose.Words不验证使用的字体的法律限制-这取决于用户。 换句话说,用户不应该为使用Aspose.Words的PDF转换提供不适当的字体。

.诺德夫Glyph

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-1b
PDF/A-2a tick
PDF/A-2b tick
PDF/A-4 tick
PDF/UA-1 tick

禁止使用.notdef字形。 如果文档包含所选字体中不存在的字符,并且也无法通过字体回退机制解析,则将出现.notdef字形。

私人用途区(PUA)

PDFAspose.Words内的标准符合程度 要求的存在
PDF/A-1a
PDF/A-1b
PDF/A-2a tick
PDF/A-2b tick
PDF/A-4 tick
PDF/UA-1

私人使用区域(PUA)字符主要用于Windows符号字体,如"Symbol",“Wingdings”,“Webdings"等。 Microsoft Word格式不提供存储字符的实际文本的选项。

“SegoeUI符号"是一种WindowsUnicode字体,可用作符号字体的替代品。