pdfcrop 无法裁剪非白色背景的 PDF 文档

pdfcrop 无法裁剪非白色背景的 PDF 文档

我有一个由以下输入文件创建的 PDF 文档。

\documentclass[cmyk,a4paper]{minimal}
\usepackage{geometry,xcolor}
\pagecolor{cyan}
\parindent=0bp

\begin{document}
\fbox{$\displaystyle E=mc^2$}
\end{document}

pdfcrop但由于背景不是白色,所以无法裁剪。我认为背景不是白色影响了边界框。那么如何解决这个问题呢?

确认

pdfcrop 的作者说马丁和列夫的报告如下:

PDF 格式不知道“页面颜色”。pdftex.def 通过在页面上放置彩色框来实现它。因此,程序无法清楚哪些框是有价值的内容,哪些框可以裁剪。

要获得正确裁剪的图像,您可以运行不带 \pagecolor 的 TeX 文档,然后运行 ​​gs -sDEVICE=bbox -dBATCH -dNOPAUSE test.pdf 以获取边界框数据。如果您使用 hyperref,则可以使用选项 pdfpagescrop 的边界框数据。或者使用选项 --box 和边界框数据运行 pdfcrop。

——海科·奥伯迪克

答案1

我会换一种方式来做:(这实际上可能会解决你的一些其他问题)

将整个内容放在序言中的保存框中。(据我所知,您必须手动启用此正常字体使用。)然后您可以测量框的尺寸并相应地设置页面尺寸。这将为您提供已具有正确尺寸的 PDF 或 PS。对于较大的内容,我建议像往常一样\normalfont使用包装器。minipage

\pagecolor命令在这里仍然有效。我原本以为你需要手动\rule在内容后面放置一个相同大小的彩色矩形 ( )。

pdflatex对我来说,使用(PDF),latex-> dvips1 (PS),latex-> dvips1 -> ps2pdf(PDF)即可完成以下操作,xelatexlualatex生成正确大小的文件。

1没有任何选项,-E无需

\documentclass{article}
\usepackage[cmyk]{xcolor}
\pagecolor{cyan}
\pagestyle{empty}
\parindent=0bp

\begin{lrbox}{0}%
    \normalfont
    \fbox{$\displaystyle E=mc^2 $}%
\end{lrbox}

\sbox0{\raise\dp0\box0}% raise box so it is all height, no depth
%\sbox0{\rlap{\textcolor{cyan}{\rule{\wd0}{\ht0}}}\box0}% \pagecolor surprisingly works so this is not needed

\usepackage[noheadfoot,nomarginpar,margin=0pt,paperwidth=\wd0,paperheight=\ht0]{geometry}

\begin{document}
\box0
\end{document}

结果

答案2

不管怎样,我遇到过类似的问题,但需要不同的解决方案。我的 PDF 是由第三方生成的,但背景是白色矩形,因此pdfcrop仍然将边界框识别为包含边距。

Python 模块pdf-crop-margins非常有用,而且 - 嗯 - 简单易用。对于非白色背景,它似乎有-t一个开关 ( --threshold),允许您指定对背景暗度的敏感度。我不确定它在文本比背景更亮的其他情况下会表现如何,但也许它还有其他开关。

相关内容