我在 GNU/Linux 机器上创建教学幻灯片,并在 Okular 中进行测试。然后我将文件传输到大学存储,以便在课堂上使用。这一直很有效。然而,今天,Adobe Reader 2017 报告 3 个 PDF 中的 2 个已损坏。在这两种情况下,幻灯片都显示正常,只是所有住院刺猬的图像都丢失了。空间在那里,但没有刺猬。所有其他图像都显示正常。所有文本都显示正常。
我刚刚将“损坏”的 PDF 重新传输到我的笔记本电脑,文件与我上传的文件完全相同。我还仔细检查了原件是否在应该出现的所有地方都包含了医院风格的刺猬。Okular 显示一切正常。
Adobe Reader XI 报告 pdfTeX 编译组合 beamer + overlay + textblock + includgraphics 的 PDF 损坏似乎相关,但很难确定,而且评论说问题无法重现。
导致我出现问题的图像以 PDF 格式包含在内。但幻灯片还使用了一张猫的图片,也以 PDF 格式包含在内,这并没有问题。
如果我将 PDF 的内容作为文本阅读,我可以看到 PDF 图像的文件路径。(我对此感到惊讶 - 我没有意识到会包含原始文件路径。)
我在处理这两幅图像时唯一能看到的两个不同之处是
- 刺猬以不同的尺寸多次出现,而猫的图像仅以单一尺寸出现一次;
- 刺猬被保存在一个尺寸的盒子里,并被用作各种幻灯片上的“标志”,而猫则没有。
但是,我不确定如何判断这其中是否有问题,或者两者兼而有之,或者都不是问题。
创建 MWE 很棘手,因为我无法知道问题何时消失,因为我只在我教的教室里使用 Windows,其他地方则无法使用。(如有必要,我可以使用实验室计算机进行测试,但这很麻烦。)
基本上,我的代码的示意图如下所示:
\pdfminorversion=7
\documentclass{beamer}
\begin{document}
\begin{Form}
\begin{frame}
\includegraphics[width=\textwidth]{hedgehog}
\end{frame}
\begin{frame}
\includegraphics[width=.225\textwidth]{hedgehog}
\end{frame}
\begin{frame}
\includegraphics[width=\textwidth]{cat}
\end{frame}
\end{Form}
\end{document}
我使用的徽标代码如下所示
\newsavebox{\hhl}
\sbox{\hhl}{%
\includegraphics[scale=.5]{hedgehogs/hedgehoghospital}}
\newcommand*\hhllogo{%
\logo{\usebox{\hhl}}% followed by code to create an attribution at the bottom of slides
}
\newcommand*\nologo{%
\logo{}% followed by code to clear the attribution from the bottom of slides
}
\hhllogo
包含多种尺寸的 PDF 图像或使用 Beamer 放置 PDF 是否\logo{}
会给 Adobe Reader 2017 带来问题?我应该注意,此代码在早期版本的 Reader 上运行良好,因为我以前没有遇到过这个问题,而且这些幻灯片与前几年几乎没有变化。
如果上述问题的答案是“否”,我该如何最好地调试它以找出我需要避免什么才能使事情正常运行?
答案1
PDF文件有很多错误。
ps2pdf
(ghostscript)的输出:
**** Error reading a content stream. The page may be incomplete.
Output may be incorrect.
**** Error: Form stream has unbalanced q/Q operators (too many q's)
Output may be incorrect.
**** Error reading a content stream. The page may be incomplete.
Output may be incorrect.
**** Error: File did not complete the page properly and may be damaged.
Output may be incorrect.
**** Error reading a content stream. The page may be incomplete.
Output may be incorrect.
**** Error: File did not complete the page properly and may be damaged.
Output may be incorrect.
**** Error: Recursive XObject detected, ignoring "Fm1", object number 51
Output may be incorrect.
**** Error: Recursive XObject detected, ignoring "Im8", object number 11
Output may be incorrect.
**** Error: Recursive XObject detected, ignoring "Fm3", object number 55
Output may be incorrect.
**** Error: Recursive XObject detected, ignoring "Fm3", object number 55
[...]
Evince 报告:
Error (3014): Incorrect number of arguments in 'sc' command
Xpdf 报告同样的错误:
Syntax Error (2966): Incorrect number of arguments in 'sc' command
错误 (sc) 似乎出现在 中hedgehoghospital.pdf
。它是带有 PDF 包装器的低分辨率位图图像。
有问题的代码:
stream
q Q q 0 0 139 142 re W n 0 sc /Gs1 gs 0 0 139 142 re f /Perceptual
ri /Gs2 gs q 139 0 0 142 0 0 cm /Im1 Do Q Q
endstream
我还没有找到cs
定义颜色空间的相应运算符。也许,默认的/DeviceRGB
是三参数并且0 sc
只使用一个参数。
解决方法:
也许,您可以找到/生成一个更好的版本
hedgehoghospital.pdf
,最好是矢量版本。使用没有 PDF 包装器的位图数据(PNG):
该程序pdfimages
可用于提取位图数据。由于我没有hedgehoghospital.pdf
,所以我使用了第三页(pdftk 5-kant4-fhei-p.pdf cat 3 output 3.pdf uncompress
)。
pdfimages `hedgehoghospital.pdf` h
这将生成:
h-0000.ppm
,图像数据h-0001.ppm
、透明度蒙版
接下来,需要将图像蒙版保存为灰度格式:
ppmtopgm <h-0001.ppm > h-0001.pgm
然后可以将两幅图像组合成 PNG 文件:
pnmtopng -alpha=333-0001.pgm <333-0000.ppm >hedgehog.png
然后,hedgehog.png
可以代替使用hedgehog.pdf
:
答案2
由于一些不清楚的原因,我也遇到过无法在教室的 Windows 计算机上显示一些 Beamer PDF 文件的问题,这些文件是在 GNU/Linux 机器上创建的。根据我的经验,使用編輯在很多情况下似乎可以防止这种情况发生,并且可能对你也有用。
我不明白“qpdf”到底有什么用,但它的手册上说,“QPDF 对 PDF 文件进行结构化、内容保留的转换。它可以被称为 pdf-to-pdf。”它允许线性化、加密、一些修复等。
该手册很长,因此我们先来快速入门一下:你可以使用以下命令加密文件
qpdf --encrypt "" mypassword 128 --accessibility=y --extract=n --print=full --modify=none --cleartext-metadata --use-aes=y -- original-file.pdf encrypted-version.pdf