下面是一个最简单的工作示例来说明这个问题。假设我们制作一个这样的文档
\documentclass[12pt]{article}
\begin{document}
11111111111111111111111111111
\vspace{5mm}
22222222222222222222222222222
\end{document}
然后用 pdfcrop 以两种方式裁剪
pdfcrop 1.pdf a.pdf --margin="0 0 -5 -530"
和
pdfcrop 1.pdf b.pdf --margin="0 0 -5 -560"
然后制作第二个文档
\documentclass[12pt]{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{a.pdf}
\vspace{5mm}
\includegraphics{b.pdf}
\end{document}
以下是结果的屏幕截图:
原本应该被裁剪的两行在突出显示时仍然可见!
有没有办法彻底裁剪 pdf,而不保留内容?要么使用 pdfcrop,要么不使用。
过去,我曾通过使用 和 转换为 ps 并转回 成功地消除了这些残留物pdf2ps
,ps2pdf
但对于更复杂的情况,它往往会栅格化矢量图形的某些部分,而这正是我想避免的。
答案1
在、的pdfcrop
选项viewport
/或大多数其他裁剪工具中,裁剪是通过缩小可见区域的尺寸、减小 或 的值来完成的。这非常快速且易于实现。但整个页面的内容trim
\includegraphics
/MediaBox
/CropBox
未受影响。这意味着,裁剪区域之外的部分仍然存在,通常是不可见的,但通过选择“不可见”文本,您会看到它存在。
删除此内容是高度昂贵而复杂,因为需要分析整个 PDF 页面内容,并只在正确的位置重写可见内容。如果对象(图像、图形元素、字符等)既在裁剪区域内又在裁剪区域外,它很快就会变得非常丑陋。
我对能够进行“深度”裁剪并去除物体的工具很感兴趣,但我不知道这样的工具。
在某种程度上,它可以手动完成,具体取决于裁剪区域、要删除的对象、PDF 页面流的编写方式以及对 PDF 页面流语法的了解程度。首先,需要解压缩 PDF 页面流,例如通过。
pdftk
然后识别生成不需要的内容的行,可以通过用注释字符替换第一个字节来删除它们%
。对象流的大小不应更改,否则需要在 PDF 结构中更正许多文件偏移量值。当然,删除不能违反语法,当前传输矩阵和其他图形状态操作符也可能需要更正。另一个选择可能是矢量图形程序,它可以导入和导出 PDF 文件。然后,不需要的对象可能会被移除。
PDF 页面可以转换为位图图像,但会有一些质量损失。然后可以使用许多工具和图像编辑器轻松裁剪该图像。