我正在使用Ghostscript使用以下命令将pdf1.3转换为pdf / a-1b:
gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -sColorConversionStrategy=sRGB -sDEVICE=pdfwrite -sOutputFile=output.pdf PDFA_def.ps input.pdf
PDFA_def.ps被定制为使用srgb icc配置文件。除了更改之外,它是GS 9.26随附的标准def文件。
现在是棘手的部分: 1-在ubuntu 18.10,GS 9.26上本地运行此转换,它工作正常,并且我得到有效的pdf / a 2-在docker容器(ubuntu 18.10。GS 9.26)中运行相同的命令也会创建一个pdf / a,被认为是有效的
但是,在第一种情况下,我可以使用野马(https://github.com/ZUGFeRD/mustangproject)处理文件以创建有效的电子发票。在第二种情况(docker容器)中,此操作失败,因为野马不将该文件视为有效的pdf。
检查两个pdf文件,我希望它们是相同的,因为我在上面运行了相同的收敛。但是,事实并非如此。在dockerfile中创建的PDF小10个字节,并且在文件本身中显示了一些不同的元信息。
我怀疑与docker容器相比,一定有一些“隐藏的依赖关系”使GS在我的主机系统上的行为有所不同,但感觉完全不对,我无法进行进一步的调试。
有人知道吗,GS还有更多依赖关系,可能导致同一命令产生不同的结果吗?
答案 0 :(得分:0)
答案是“也许”。这取决于如何为入门者构建Ghostscript。
我认为您正在使用一个软件包,而不是自己从源代码构建。在这种情况下,存在许多依赖关系,包括: FreeType,LibJPEG,JBIG2dec,LibTIFF,JPEG-XR,LCMS2,LibPNG,OpenJPEG,Expat,zlib,可能的IJS,CUPS和X-Windows,取决于内置的设备。
这些中的任何一个或全部都可以是系统共享的库,而不是使用Artifex随附的特定版本来构建。它们在两个系统上也可能是不同的版本。
也就是说,我认为这不太可能是您的问题。但是,没有看到PDF文件,我无法告诉您为什么会有区别。由于元数据中包含日期/时间戳,因此可能会有所不同。
我真的需要查看原始示例和两个输出的PDF文件,以便能够进一步发表评论。
[编辑]
查看已压缩的文件(毫不奇怪),如果输入流中的差异很小,显然会导致大小差异。因此,第一个任务是解压缩文件。
完成后,我发现它们之间基本上没有区别。其中一个操作系统使用的时区比UTC晚7个小时,另一个操作系统使用的是UTC时区,因此其中一个系统的时间戳记为(例如)
2019-04-26T19:49:01Z
另一个正在使用
2019-04-26T12:51:35-07:00
因此,代替Z(对于UTC),您得到-07:00,这是额外的10个字节来自的地方。除此之外,唯一ID是(如您所想象的)不同,对于包含日期的流,流的Length值也不同,并且由于流的长度不同,startxref也不同。
两个文件都声称与PDF / A-1b兼容。简而言之,我看不出它们之间有什么真正的区别。由于您使用的是工具来进一步处理文件,因此建议您尝试从工作系统中获取PDF文件,并尝试在非工作系统上进行处理,反之亦然,在我看来,问题可能出在而不是PDF文件本身。也许您在两个系统上都有该工具的不同版本。
对于可能的价值,可以诱使Ghostscript直接创建ZUGFeRD文件,请参阅this错误报告和this提交到存储库。