将 PDF 转换为 PDF/A?

use*_*ser 13 pdf

给定一个随机来源的 PDF,我如何在 Linux 上:

  • 确认它是否已经是PDF/A格式?
  • 如果它不是 PDF/A 格式,请将其转换为 PDF/A 且保真度损失最小?

我知道转换可能会导致文档中奇异元素的丢失,但让我们假设在相对较远的将来完全打开文档的能力比这种漂亮的功能(在这种情况下可能不可用/不可读)更重要反正有一段时间)。当我可以轻松地并排查看文档时,我宁愿能够直观地确认转换的准确性,也不愿冒无法打开原始文件的风险。

slm*_*slm 9

鉴别

我发现这个工具看起来可以用来识别 PDF/A 文件。它被称为DROID(数字记录和对象识别)。它基于 Java,可以从 GUI 或命令行运行。

摘抄

DROID 是由国家档案馆开发的一种软件工具,用于执行文件格式的自动批量识别。DROID 由其数字保存部门开发,作为其更广泛的数字保存活动的一部分,旨在满足任何数字存储库的基本要求,即能够识别所有存储数字对象的精确格式,并将该识别链接到中央注册表有关该格式及其依赖项的技术信息。

鉴于它是由国家档案馆赞助的,鉴于 PDF/A 格式的预期目的,我认为它是执行此操作的正确工具。此外,该项目是开源的,代码可以在 Github 上获得,也可以从国家档案馆网站以二进制形式打包。

验证和转换

如果您正在寻找执行验证和转换的工具,我相信PDFBox可以做到这一点。PDFBox 在其网站的首页上列出了 PDF/A 验证。这是另一个 Java 应用程序 8-)。

摘自网站

PDF/A 验证
根据 PDF/A ISO 标准验证 PDF。

在其主页左侧的命令行工具部分下,显示该工具的以下用法:

$ java -jar pdfbox-app-x.y.z.jar org.apache.pdfbox.ConvertColorspace [OPTIONS] <inputfile> <outputfile>
Run Code Online (Sandbox Code Playgroud)

veraPDF是另一个能够验证 PDF/A 的工具;它是开放保护基金会参考工具集的一部分。它也是一个 Java 应用程序。

转换

为了进行转换,我从一篇题为:Free way to convert an existing PDF to PDF/A的博客文章中找到了这种方法,它使用以下工具:

  • 仅限 Ghostscript 8.64。
  • PDFBox 0.7.3
  • pdfmarks(提供额外元数据的文件)
  • PDFA_def.ps
  • USWebCoatedSWOP.icc

有了以上内容,您可以使用以下命令:

$ gs -sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH -dNOSAFER     \
-dPDFA -dUseCIEColor -sProcessColorModel=DeviceCMYK       \
-sOutputFile=Out_PDFA.pdf PDFA_def.ps pdfmarks IN_PDF.pdf
Run Code Online (Sandbox Code Playgroud)

它并非没有疣。文章讨论了其中之一,修复超链接上的打印标志就是其中之一。本文提供了一个 Java 应用程序,您可以使用它来修复这些问题:

$ java FixPrintFlag Out_PDFA.pdf New_verifiablePDFA.pdf
Run Code Online (Sandbox Code Playgroud)

它不漂亮,但似乎可行。有关更多详细信息,请参阅文章

参考


dar*_*uma 9

这是一个执行此操作的 bash 命令行脚本:

#!/bin/bash

pdf_input=$1
ps_output=${pdf_input%.*}.ps
pdfa_output=${pdf_input%.*}_a.pdf
pdftops ${pdf_input} ${ps_output}

gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=${pdfa_output} ${ps_output}
Run Code Online (Sandbox Code Playgroud)

将其保存在路径中名为 pdf2pdfa.sh 的文件中,然后按如下方式调用它:

pdf2pdfa.sh 输入.pdf

它将创建 input_a.pdf。

  • (1) 请解释一下它的作用。(2)什么是“输入”?我看到“pdf_input”,但“input”是什么?(3) 你应该总是引用 shell 变量,除非你有充分的理由不这样做,并且你*确定*你知道你在做什么。请不要在评论中回复;[编辑]您的答案,使其更清晰、更完整。 (2认同)