给定一个随机来源的 PDF,我该如何在 Linux 上执行以下操作:
- 确认是否在PDF/A已经格式化了吗?
- 如果它不是 PDF/A 格式,是否将其转换为 PDF/A 且保真度损失最小?
我知道转换可能会导致文档中外来元素的丢失,但我们假设在相对遥远的将来打开文档的能力比这种漂亮的功能更重要(在这样的情况下可能不可用/可读)无论如何)。当我可以并排查看文档时,我宁愿能够直观地确认转换的准确性,也不愿冒着无法打开原始文件的风险。
答案1
鉴别
我发现这个工具看起来可以用来识别 PDF/A 文件。它被称为DROID(数字记录和对象识别)。它基于 Java,可以从 GUI 或命令行运行。
摘抄
DROID 是国家档案馆开发的一款软件工具,用于自动批量识别文件格式。 DROID 由其数字保存部门开发,作为其更广泛的数字保存活动的一部分,旨在满足任何数字存储库的基本要求,能够识别所有存储的数字对象的精确格式,并将该识别链接到中央注册表有关该格式及其依赖性的技术信息。
鉴于它是由国家档案馆赞助的,考虑到 PDF/A 格式的预期目的,我认为它是执行此操作的正确工具。该项目也是开源的代码可以在 Github 上找到以及以二进制形式打包的国家档案馆网站。
验证和转换
如果您正在寻找执行验证和转换的工具,我相信PDF盒可以做到这一点。 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>
维拉PDF是另一种能够验证 PDF/A 的工具;它是开放保护基金会参考工具集的一部分。它也是一个 Java 应用程序。
转换
为了进行转换,我从标题为以下的博客文章中找到了此方法:将现有 PDF 转换为 PDF/A 的免费方式,使用以下工具:
- 仅 Ghostscript 8.64。
- PDF框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
它并非没有缺点。本文讨论了其中之一,修复超链接上的打印标志就是其中之一。本文提供了一个 Java 应用程序,您可以使用它来修复这些问题:
$ java FixPrintFlag Out_PDFA.pdf New_verifiablePDFA.pdf
它不漂亮,但似乎可行。请参阅文章更多细节。
通过cups另存为PDF/A
cups 允许“打印到 pdf 文件”。使用的命令位于/etc/cups/cups.conf
.在那里您将找到一个变量GSCall
,其中包含用于调用gs
二进制文件以创建 pdf 文件的参数。在参数-dPDFA
之前添加-dNOPAUSE
,现在 Linux 上所有应用程序中的所有“打印为 pdf”文件将神奇地变成 PDF/A!
参考
答案2
这是一个执行此操作的 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}
将其保存在路径中名为 pdf2pdfa.sh 的文件中,然后按如下方式调用它:
pdf2pdfa.sh 输入.pdf
它将创建 input_a.pdf。
答案3
对于文件识别,该命令file
通常很有帮助。它会在您的文件中查找幻数、文件标识符、编码信息等,以提供任何有用的信息。
在 PDF 文件的特定情况下,该实用程序pdfinfo
特别有用。就我而言,它是一个 Gentoo 发行版,它与poppler
PDF 渲染库一起打包。