为什么 Windows 下的许多 pdf 阅读器无法打开我使用 Linux/ubuntu 发行版 texlive 下的 pdflatex 创建的 pdf 文件

为什么 Windows 下的许多 pdf 阅读器无法打开我使用 Linux/ubuntu 发行版 texlive 下的 pdflatex 创建的 pdf 文件

这是一个涉及两个领域的问题。操作系统和从 LaTex 脚本创建 pdf 文档。要点如下。当我使用 pdflatex 在 Linux 下创建 pdf 文件时,我只能使用一些非常特定且通常是专有的工具在 Windows 下打开该文件。我已Texlive在运行 Ubuntu 的计算机上安装了此软件。在一家只运行 Windows 的印刷店中,此文件打开问题已经是一个问题,店主不愿意(也无法)尝试使用 Sumatra-pdf 等打开,而这本来是可行的。...

我必须并且能够通过在安装了 MikTex 发行版的 Windows 下编译代码来解决这个问题(我认为它也使用pdfLaTeX),并且一切正常。不幸的是,简单的 unix2dos 无法完成这项任务,unix2dos 只能根据转换方向回车符进行转换,我认为它可以进行一些重新编码。无论如何,我还是尝试了一下,它告诉我在第 8 行发现了一个二进制符号 0x1C。我做了一些研究。这是控制字符 (fs) - 文件分隔符。在这个位置可能放置了一个 png 文件。在这个线程中,有人不是通过“ghostscripting”而是通过将 png 转换为 pdf 解决了这个问题。如何使用 pdfLaTeX 文档克服 Acrobat Reader 错误 131?

无论如何,我认为这样的程序是没有必要的。为什么所有MikTex文档都可以在 Linux 下打开,而反之则不行?这是程序中的错误pdfLaTeX,还是其他取决于我的安装或不可预测的事情?但与此相反,它与 MikTeX 配合得很好。我们可以做些什么来克服这个问题。

答案1

PDF 文件二进制文件。它们不能被复制为具有自动行尾转换的文本文件。基本上,PDF 文件是对象列表(具有对象编号的间接对象),其在文件中的位置记录在交叉引用表中以供快速查找。当行尾从 Unix(1 字节 = 换行符)更改为 Windows/DOS(2 字节 = 回车符和换行符)时,位置将失效。此外,交叉引用表要求行中的条目具有固定长度(PDF 不使用带有压缩 xref 表的对象流压缩)。更改行尾还会破坏交叉引用表。

当交叉引用表损坏时,只有少数 PDF 查看器(例如 AR)可以通过尝试解析 PDF 来查找对象,从而打开这种损坏的 PDF 文件。

检查将文件从一个系统复制到另一个系统的工作流程。使用校验和工具(md5sum及同类工具)并检查文件大小,以确保 PDF 文件未被修改。

有时将 PDF 文件存档会有所帮助。同样,此处的文件必须被视为二进制文件。

相关内容