如果我创建具有黑色背景的宽高比为 16:9 的 PDF(例如通过视频投影仪观看),则当我将其转换为图像时,其底部边缘会出现一条幻影白线。
下面是查看此内容的最少代码:
\documentclass{article}
\usepackage[papersize={160mm,90mm}]{geometry}
\usepackage{color}
\pagecolor{black}
\begin{document}
\null
\end{document}
通过 pdflatex 或 XeTeX 编译它,然后:
pdftoppm test.pdf img
结果是黑色图像,底部有一条像素的白线。
我可以通过设置稍微不同的来摆脱这一行papersize
,例如:
\usepackage[papersize={159.8mm,89.85mm}]{geometry}
如果我使用 4:3 的宽高比,也可以消除这个问题,例如:
\usepackage[screen]{geometry}
papersize
除了捏造、要求裁剪页面或随后在 Imagemagick 中裁剪之外,还有其他方法可以摆脱这一行吗pdftoppm
?例如,通过在每个页面上制作一个比纸张尺寸稍大的黑色背景矩形?底层问题是 TeX 舍入误差还是与 PDF 输出有关?有没有办法直接将 PDF 文档的背景设置为黑色而不是白色,而不是通过pagecolor
?
这里的目标是通过 TeX 生成 1920x1080 的可视图像,例如:
pdftoppm -scale-to-x 1920 -scale-to-y -1 -png test.pdf img
我也很乐意学习一种更好的方法来为具有深色背景的页面生成屏幕输出。我之所以这样做,是因为当我在“幻灯片预览”模式下查看以此方式生成的 16:9 PDF 时,我看到深色页面周围有令人分心的白色边框。(在 Acrobat 中看不到这种情况。)在尝试通过为每个页面创建图像来解决这个问题时,我遇到了这个pdftoppm
问题。
我能找到的唯一相关问题:Beamer 框架顶部显示一条白线
答案1
页面颜色是在页面上绘制的一个矩形。它已经比媒体框大一点,但只在右侧和顶部。在左侧和底部,它像媒体框一样从零开始。然后转换似乎引入了一些舍入误差,从而产生了一条白线。
我看不出矩形不应该比其他边大一点的任何理由。这里似乎运行良好(使用 pdflatex!)并且白线消失了。如果它对你有用,你可以提出功能请求。
\documentclass{article}
\usepackage[papersize={160mm,90mm}]{geometry}
\usepackage{color}
\makeatletter %copied from pdftex.def:
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname currentgrouplevel\endcsname\relax
\catcode`X=9 % ignore
\catcode`E=14 % comment
\else
\catcode`X=14 % comment
\catcode`E=9 % ignore
\fi
\def\set@page@color{%
\global\GPT@pagecolortrue
\global\let\current@page@color\current@color
\@ifundefined{GPT@outputbox}{%
% \newbox is outer in plain
\csname newbox\endcsname\GPT@outputbox
}{}%
\@ifundefined{GPTorg@shipout}{%
\global\let\GPTorg@shipout\shipout
\gdef\shipout{%
X % ensure \GPT@outputbox is really void
X \begingroup
X \setbox\GPT@outputbox=\box\GPT@outputbox
X \endgroup
E \edef\GPT@saved@grouplevel{\number\currentgrouplevel}%
\afterassignment\GPT@shipout
\global\setbox\GPT@outputbox=%
}%
\gdef\GPT@shipout{%
X \ifvoid\GPT@outputbox\relax
E \ifnum\GPT@saved@grouplevel=\currentgrouplevel
E \else
\expandafter\aftergroup
\fi
\GPT@@shipout
}%
\gdef\GPT@@shipout{%
\ifvoid\GPT@outputbox\relax
\PackageInfo{pdftex.def}{Ignoring void output box}%
\else
\setbox\GPT@outputbox=\vbox{%
\GPT@pageliteral
\box\GPT@outputbox
}%
\GPTorg@shipout\box\GPT@outputbox\relax
\fi
}%
\gdef\GPT@pageliteral{%
\ifGPT@pagecolor
\pdfliteral page{%
q % gsave
\current@page@color\GPT@space
n % newpath
-1 -1 \strip@pt\pdfpagewidth\GPT@space
\strip@pt\pdfpageheight\GPT@space re % rectangle
% there is no need to convert to bp
f % fill
Q% grestore
}%
\fi
}%
}{}%
}
\catcode`\X=11 %
\catcode`\E=11 %
\pagecolor{black}
\begin{document}
\null
\end{document}