我最近只需要一个空白的PDF页面(8.5“ x 11”大小),并且意识到我不知道如何从命令行制作一个。
发行touch blank.pdf
会产生一个空的PDF 文件。是否有命令行工具生成空白的PDF 页面?
我最近只需要一个空白的PDF页面(8.5“ x 11”大小),并且意识到我不知道如何从命令行制作一个。
发行touch blank.pdf
会产生一个空的PDF 文件。是否有命令行工具生成空白的PDF 页面?
Answers:
convert
,是Ketan的答案中使用的ImageMagick实用程序,还允许您编写类似
convert xc:none -page Letter a.pdf
要么
convert xc:none -page A4 a.pdf
或(用于水平A4纸)
convert xc:none -page 842x595 a.pdf
等等,而不创建一个空的文本文件。@chbrown注意到这会创建一个较小的pdf文件。
“ xc:”表示“ X常量图像”,但实际上可以认为是“ x画布”。这是一种指定单个颜色块的方法,在这种情况下,没有一种。有关更多信息,请参见http://imagemagick.org/Usage/canvas/#solid,这是ImageMagick的“事实上”手册。[补充有从管信息(比如像pdf:a
可用于显式声明文件的格式。label:'some text'
,gradient:
,rose:
并logo:
似乎是特殊的文件格式其它例子。)
Anko建议将此修改作为单独的答案发布,所以我正在这样做。
~/bin
像最小的GIF一样,需要手工制作最小的空白页PDF,因为它是如此之小,以致元数据的无用但无害的位成为文件大小的重要组成部分,而压缩实际上会使事情变大。它还需要仔细注意PDF规范中有关文件结构的哪些位和不需要位的规则。(你知道吗,页面的对象必须包含一个/Resources
字典,即使它是空的,但并不需要包括/Contents
流?)
如果您不使用PDF 1.5对象和交叉引用流(其优点是该文件可以完全打印为ASCII),我相信您可以做到的最好是317个字节。如果复制和粘贴,请注意,需要有对交叉引用表项的所有四个尾随空间(之间的界限0 4
和trailer<<...
),并且有不应该是后一个最终换行符%%EOF
。
%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f
0000000009 00000 n
0000000052 00000 n
0000000101 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
178
%%EOF
用手动制作的v1.5交叉引用流替换交叉引用表会使文件稍小,但代价是不再可打印ASCII:294字节。(出于可读性考虑,更不用说完全能够键入它了,下面的外部参照流已进行了十六进制转储,但这并未反映在其流字典中。要恢复有效的PDF,您必须将十六进制转储替换为相应原始的二进制字节,或者改变/Length 15
到/Length 30/Filter/ASCIIHexDecode
并接受一个文件,该文件是328个字节长。)
%PDF-1.5
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
4 0 obj<</Type/XRef/Size 5/W[1 1 1]/Root 1 0 R/Length 15>>stream
0000ff01090001340001650001b200endstream endobj
startxref
178
%%EOF
我还尝试了将对象1到3包装到对象流中,但是即使压缩了流,这也会增加比其节省的开销。
外部参照流的可能替代公式是
4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj
令人遗憾的是,尽管实际流数据的长度大大节省了,但额外的/Index[1 4]
占用了所有节省的空间,只有一个字节。另外,我不清楚是否允许将对象0完全保留在文件之外。(这也是我不清楚对象0是否必须具有生成号-1,如果多数民众赞成不是必需的,你居然保存多个字节
4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj
)
要更改纸张尺寸,请替换612 792
为适当的宽度和高度,以PostScript点(72 PostScript点= 1 US英寸或25.4毫米)表示。例如,595 842
对于A4。您可以将其嵌入到shell脚本中,该脚本会弹出所需纸张大小的空白PDF。唯一棘手的部分是startxref
即使对象3的大小发生变化,也要确保偏移量保持准确。
如果已convert
安装(ImageMagick实用程序),则可以执行以下操作:
touch a.txt && convert a.txt -page Letter a.pdf
convert
也有一个-size
选项,您可以用来设置输出pdf的大小。
convert xc:none -page Letter a.pdf
而不创建空的txt文件。
(null)
字体错误。
convert.im6: improper image header
a.txt'@ error / txt.c / ReadTXTImage / 429。convert.im6:未定义图像a.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
由groff带给您的东西,这是世界上被低估的软件。
groff: can't find `DESC' file
并groff:fatal error: invalid device `pdf'
用在CentOS 7.2版本的groff 1.22.2。
bash 4.1.2
跑步给我同样的消息groff 1.18.1.4
.bp
只是代表“分页”,这就是为什么生成2页文档的原因。要生成一页文档,只需执行更简单的操作即可echo | groff -T pdf > blank.pdf
。
echo .bp
确实应该由代替echo
,就像@FaheemMitha所说的
您可以使用pdfTeX:
echo '\shipout\hbox{}\end' | pdftex
它将产生texput.pdf
约900字节的空白单页,仅为ImageMagick使用的一半。
但是,这使您不受TeX安装默认纸张尺寸的影响。要显式设置大小,您可以转到LaTeX:
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
\begin{document}\shipout\hbox{}\end{document}' | pdflatex
另一个选择是使用Ghostscript的PDF驱动程序,尽管该ps2pdf
脚本很方便:
echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf
它比TeX安静得多,但产生的输出却不那么紧凑(约2300字节)。
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
。它稍小一点,为2200字节。
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
创建article.pdf
。是否可以blank.pdf
直接创建?
-jobname <basename>
在命令行上使用来设置输出文件的基本名称。
\shipout\hbox{}
或showpage
产生一页。TeX和Postscript都具有可以使用的循环结构,但是使用所选的脚本语言将命令重复适当的次数可能更简单。
在命令行上,输入:
ps2pdf blank.pdf
该命令ps2pdf
用于将PostScript文件转换为pdf
ps2pdf file.ps file.pdf
ps2pdf blank.pdf
返回错误,因为它期望将Postscript文件作为参数。第二个命令需要一个预先存在的命令file.pdf
。我想念什么吗?
touch blank.ps
。2 ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf