PDF/X、PDF/A、PDF/E:有什么区别,为什么有这么多格式?

本文介绍了PDF的不同子类型,如PDF/X(专注于印刷质量)、PDF/A(电子归档),以及PDF/E(工程文档)。FastReport.NET支持大部分导出格式,展示了如何将报告导出为PDF/A等特定标准。每个子类型的特性针对不同行业需求进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PDF 是一种通用文件格式,允许用户演示和共享文档,无论软件、硬件或操作系统如何。多年来,已经创建了多种 PDF 子类型来满足各个行业的不同需求。让我们看看一些最流行的格式:PDF/X、PDF/A 和 PDF/E。

    FastReport .net下载

PDF/X

PDF/X 是一种专业的图形交换标准,针对一致且可预测的打印进行了优化。与可以包含任何内容(例如交互式元素和媒体文件)的常规 PDF 不同,PDF/X 仅限于某些数据类型,这使其特别适合共享可打印的文件。

PDF/X的主要特点:

  • 颜色模型。文档中的所有颜色都必须在已知的颜色空间中定义,通常是 CMYK 或专色。它消除了与印刷中颜色解释相关的不确定性。
  • 内置资源。所有必需的资源(例如字体和图像)都必须嵌入到文件中。它确保文档在任何硬件上看起来都相同。
  • 没有互动元素。没有评论、表单字段、视频和 JavaScript 等交互元素。
  • 指定的输出格式。该文档必须包含有关打印时如何显示的信息,这意味着对页面的位置和布局有一定的要求。

PDF/X 子 类型:

PDF/X-1a:

  • 基于 PDF 1.3 标准。
  • 颜色仅定义为 CMYK 或专色。
  • 不支持 ICC 配置文件。

PDF/X-3:

  • 支持 CMYK、专色和 ICC 配置文件。
  • 允许您在一份文档中使用不同的色彩空间。

PDF/X-4:

  • 支持 PDF 1.6 及更高版本中提供的图层、透明度和其他新功能。
  • 支持多种色彩空间
PDF/A

PDF/A 是 PDF 格式的子集,旨在满足电子文档长期存储的需求。与 PDF 标准不同,PDF/A 禁止使用可能在较长时间内导致文档外观出现问题的组件,这使其成为归档的理想选择。

PDF/A的主要特点:

  • 内置资源。正确显示文档的所有资源(例如字体和图像)必须嵌入到文件中。
  • 缺乏互动性。禁止 JavaScript、音频、视频和可执行文件等交互元素。
  • 颜色稳定。文档必须使用稳定的颜色模型,以保证长期显示的一致性。
  • 禁止外部依赖。您不得引用可能随时间变化或消失的外部资源。

PDF/A 子类型:

PDF/A-1:

  • 基于 PDF 1.4 标准。
  • 它分为两部分:PDF/A-1a 用于完全合规性,包括用于可访问性的结构标签,以及 PDF/A-1b 用于基本视觉合规性。

PDF/A-2:

  • 基于 PDF 1.7 标准。
  • 包括改进的对嵌入注释、图层、透明度和压缩的支持。
  • 它还分为合规级别:PDF/A-2a、PDF/A-2b、PDF/A-2u。

PDF/A-3:

  • 扩展 PDF/A-2,允许构建任何格式的嵌入式文件(包括 XML、CSV 或 CAD 文件)。
  • 它还分为合规级别:PDF/A-3a、PDF/A-3b、PDF/A-3u。
PDF/电子版

PDF/E 是 PDF 格式的子集,专为工程、建筑和施工专业人士设计。该标准解决了共享、查看和打印动态技术文档(包括图表、绘图和 3D 图形)的需求。

PDF/E的主要特点:

  • 支持复杂图形。包括图层、透明度、3D 模型和交互元素。
  • 元数据。增强的元数据可改进文档内容的搜索和管理。
  • 精确的几何形状。用于精确再现直线、曲线和曲面等几何对象。
  • 嵌入文件。能够包含相关文件或源文件,例如规格或 CAD 数据。
为什么有这么多格式?

不同的行业有不同的需求。创建专门的 PDF 子集使我们能够满足这些需求,而无需创建全新的标准。这些配置文件可确保特定应用的标准化、可预测性和可靠性。

FastReport .NET 中是否提供这些格式?

FastReport .NET 拥有大部分导出格式,仅缺少 PDF/E。这些格式可以在设计器和应用程序代码中使用。要在设计器中选择所需的格式,请单击“保存”和“PDF 格式”。然后转到“设置”选项卡并选择所需的格式。

格式选择

最后,我们将收到所需格式的所需文件。

要导出为特定格式,我们需要创建一个应用程序,连接FastReport包,并编写所需的代码。以下是如何将 PDF 另存为 PDF/A 的示例。

Report report = new Report();
report.Load("PathToYourReport.frx");
// Setting up PDF export
PDFExport pdfExport = new PDFExport();
// For export to PDF/A format
pdfExport.PdfCompliance=PDFExport.PdfStandard.PdfA_2a;
// You can select the desired compliance level
report.Prepare();
report.Export(pdfExport, "OutputPath.pdf");

尽管 PDF 子类型有很多,但每种子类型都是为了特定目的并满足特定行业的需求而开发的。选择哪种格式以及您需要它的目的完全取决于您。

ItextPdf是一个开源的PDF文件处理库,可以用Java语言来动态生成PDF文件。对于已有的PDF表格进行填充,可以使用ItextPdf提供的PdfReader和PdfStamper类来实现。下面是一个示例代码: ```java public void fillPdfForm(String srcFile, String destFile, List<Map<String, String>> data) { try { // 创建PdfReader PdfReader reader = new PdfReader(srcFile); // 创建PdfStamper PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile)); // 获取表单域 AcroFields form = stamper.getAcroFields(); // 获取表格域 Map<String, AcroFields.Item> fields = form.getFields(); for (String name : fields.keySet()) { AcroFields.Item item = fields.get(name); if (item.getType() == AcroFields.FIELD_TYPE_PUSHBUTTON) { // 忽略按钮 continue; } if (item.getType() == AcroFields.FIELD_TYPE_TEXT) { // 忽略文本域 continue; } if (!item.getMerged(0).get(PdfName.SUBTYPE).equals(PdfName.WIDGET)) { // 忽略非表格域 continue; } // 获取表格域所在的页码 int page = item.getPage(0); // 获取表格单元格的坐标 Rectangle rect = item.getWidget(0).getRectangle(); float x = rect.getLeft(); float y = rect.getBottom(); float w = rect.getWidth(); float h = rect.getHeight(); // 获取表格中的行和列 int row = Integer.parseInt(item.getMerged(0).get(PdfName.I).toString()); int col = Integer.parseInt(item.getMerged(0).get(PdfName.J).toString()); // 获取表格的名称 String fieldName = item.getMerged(0).get(PdfName.T).toString(); // 获取该单元格的数据 String value = data.get(row).get(fieldName); // 在表格单元格中填充数据 PdfContentByte cb = stamper.getOverContent(page); cb.beginText(); cb.moveText(x, y); cb.setFontAndSize(BaseFont.createFont(), 12); cb.showText(value); cb.endText(); } // 关闭PdfStamper和PdfReader stamper.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 以上代码中,fillPdfForm方法用于填充PDF表格。其中,srcFile参数是需要填充的PDF文件路径,destFile参数是生成的PDF文件路径,data参数是需要填充的数据列表。在方法中,首先通过PdfReader类读取PDF文件,然后通过PdfStamper类来填充表格数据。通过AcroFields类的getFields方法获取全部表单域,遍历所有表格域,并获取表格域的页码、坐标、行列和名称等信息,最后通过PdfContentByte类的beginText、moveText、setFontAndSize和showText方法来填充表格数据。最后关闭PdfStamper和PdfReader即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值