将PDF转换为PDF / A?


11

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

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

我知道转换可能会导致丢失文档中的奇特元素,但是让我们假设,在相对较远的将来完全打开文档的功能比这些功能强大(在这种情况下可能无法使用/无法读取)更重要无论如何)。当我可以并排地查看文档时,我宁愿能够直观地确认转换的准确性,而不必冒险无法打开原始文件。

Answers:


9

身份证明

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

摘抄

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

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

验证与转换

如果您正在寻找执行验证和转换的工具,我相信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>

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

转换次数

对于仅进行转换,我从标题为:将现有PDF转换为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

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

$ java FixPrintFlag Out_PDFA.pdf New_verifiablePDFA.pdf

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

参考文献


我将不得不尝试一下-它看起来非常有前途。稍微摆弄一下,甚至可以将其集成到CUPS-PDF打印机中。/etc/cups/cups-pdf.conf中有一些设置很有用。感谢您抽出宝贵的时间!现在还没有真正进行测试,但我会再说一遍(希望明天再说)。
CVn 2013年

@MichaelKjörling-感谢您的提问。我以前从未听说过PDF / A格式,因此我们需要这项工作。所以您帮助我看起来像个天才,因为他现在知道这些东西8-)。
slm

什么pdfmarks
Andrew

@AndrewMacFie-adobe.com
/

1

对于文件识别,该命令file通常很有帮助。它会在您的文件中查找幻数,文件标识符,编码信息等,以提供所有有用的信息。

在PDF文件的特定情况下,实用pdfinfo程序特别有用。就我而言,是一个Gentoo发行版,它与popplerPDF渲染库打包在一起。


1
pdfinfo -meta然后看xmpmeta/RDF/Description/conformance似乎在说PDF是否为PDF / A(该节点为A)(该节点不存在或具有其他值)。这是一个开始!
CVn 2013年

0

这是一个bash命令行脚本,它就是这样做的:

#!/bin/bash

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

gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=$pdfa_output $ps_output

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

pdf2pdfa.sh输入.pdf

它将创建input_a.pdf。


2
(1)请解释一下。(2)什么是input?我明白了pdf_input,那是input什么?(3)除非有充分的理由不这样做,否则应始终引用shell变量,并且确定自己知道自己在做什么。请不要在评论中回复;编辑  您的答案,使其更清晰,更完整。
G-Man说'Reinstate Monica''Oct
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.