我使用以下命令使用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配置文件。除了这个变化,它是GS9.26附带的标准def文件。
现在到了棘手的部分: 1-在ubuntu 18.10,gs9.26上本地运行这个转换,它工作得很好,并且我得到了一个有效的pdf/a2-在docker容器中运行相同的命令(ubuntu 18.10。Gs9.26)也会创建一个pdf/a,这被认为是有效的
但是,在第一个场景中,我可以使用mustang (https://github.com/ZUGFeRD/mustangproject)处理该文件,以创建有效的电子发票。在第二种情况下(docker容器),这会失败,因为mustang认为该文件不是有效的pdf。
检查这两个pdf文件,我会期望它们是相同的,因为我在它上面运行相同的转换。然而,它们并不是。dockerfile中创建的PDF文件要小10个字节,并且在文件本身中显示了一些不同的元信息。
我怀疑一定有一些“隐藏的依赖项”,使得GS在我的主机系统上的行为与docker容器不同,但这感觉完全错误,我已经没有进一步调试的方法了。
有没有人知道,GS是否有更多的依赖项,可能会导致相同的命令产生不同的结果?
发布于 2019-04-27 02:52:57
答案是“可能”。这取决于Ghostscript是如何为初学者构建的。
我假设您使用的是一个包,而不是自己从源代码构建。在这种情况下,有许多依赖项,包括: FreeType、LibJPEG、JBIG2dec、LibTIFF、JPEG-XR、LCMS2、LibPNG、OpenJPEG、Expat、zlib、潜在的IJS、CUPS和X-Window,这取决于内置的设备。
这些库中的任何一个或全部可以是系统共享库,而不是使用Artifex提供的特定版本构建的。它们在两个系统上也可以是不同的版本。
也就是说,我认为这“不太可能”是你的问题。但是,如果不看PDF文件,我就不能告诉你为什么会有区别。元数据中的差异是意料之中的,因为它包含日期/时间戳。
我真的需要看到原始和两个输出PDF文件的例子才能进一步评论。
编辑
看看这些文件,它们是压缩的(毫不奇怪),如果输入流中有微小的差异,这显然会导致大小的差异。因此,第一个任务是解压缩文件。
这样做,我看到,基本上,他们之间没有区别。其中一个操作系统使用的时区比UTC晚7小时,另一个操作系统使用的是UTC,因此其中一个系统的时间戳为(例如)
2019-04-26T19:49:01Z
另一种是使用
2019-04-26T12:51:35-07:00
因此,不是Z(表示UTC),而是-07:00,这是额外的10个字节的来源。除此之外,唯一的ID是不同的(正如您想象的那样),流的长度值对于包含日期的流是不同的,startxref也是不同的,因为流的长度不同。
这两个文件都声称与PDF/A-1b兼容。简而言之,我看不出它们之间有什么真正的区别。由于您正在使用工具进一步处理文件,我建议您尝试从您的工作系统中获取PDF文件,并尝试在非工作系统上处理它,反之亦然,在我看来,问题可能是后期处理而不是PDF文件本身。也许您在两个系统上具有该工具的不同版本。
对于它可能的价值,可以诱导Ghostscript直接创建ZUGFeRD文件,请参阅this错误报告和this提交到存储库。
https://stackoverflow.com/questions/55869953
复制相似问题