我最近需要一个空白的 PDF 页面(8.5" x 11" 大小)并意识到我不知道如何从命令行制作一个。
发出touch blank.pdf
会产生一个空的 PDF文件。是否有生成空 PDF页面的命令行工具?
Bar*_*hom 110
convert
,Ketan 的答案中使用的 ImageMagick 实用程序,还允许您编写类似
convert xc:none -page Letter a.pdf
Run Code Online (Sandbox Code Playgroud)
或者
convert xc:none -page A4 a.pdf
Run Code Online (Sandbox Code Playgroud)
或(对于水平 A4 纸)
convert xc:none -page 842x595 a.pdf
Run Code Online (Sandbox Code Playgroud)
等,而无需创建空文本文件。@chbrown 注意到这会创建一个较小的 pdf 文件。
“xc:”的意思是“X 恒定图像”,但实际上可以被认为是“x 画布”。这是一种指定单个颜色块的方法,在这种情况下没有。更多信息请访问http://imagemagick.org/Usage/canvas/#solid,这是 ImageMagick 的“事实上的”手册。[补充有从管信息(比如像pdf:a
可用于显式声明文件的格式。label:'some text'
,gradient:
,rose:
并logo:
似乎是特殊的文件格式其它例子。)
Anko 建议将此修改作为单独的答案发布,所以我正在这样做。
zwo*_*wol 37
与最小的 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
Run Code Online (Sandbox Code Playgroud)
用手动制作的 v1.5 交叉引用流替换交叉引用表确实会使文件稍微小一些,代价是它不再是可打印的 ASCII:294 字节。(为了可读性,更不用说能够输入它了,下面的外部参照流已被十六进制转储,但这并没有反映在它的流字典中。要恢复有效的 PDF,您必须将 hexdump 替换为对应的原始二进制字节,或更改/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
Run Code Online (Sandbox Code Playgroud)
我还尝试将对象 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
Run Code Online (Sandbox Code Playgroud)
可悲的是,尽管实际流数据的长度大大节省,但额外的/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
Run Code Online (Sandbox Code Playgroud)
.)
要更改纸张大小,请替换612 792
为适当的宽度和高度,以 PostScript 点表示(72 PostScript 点 = 1 美制英寸或 25.4 毫米)。例如,595 842
对于 A4。您可以将其嵌入到 shell 脚本中,该脚本会输出所需纸张大小的空白 PDF;唯一棘手的部分是确保startxref
偏移量保持准确,即使对象 3 的大小发生变化。
mkc*_*mkc 24
如果您安装了convert
(ImageMagick 实用程序),您可以这样做:
touch a.txt && convert a.txt -page Letter a.pdf
Run Code Online (Sandbox Code Playgroud)
Jam*_*den 15
echo .bp | groff -T pdf > t.pdf
由世界上最被低估的软件 groff 带给您。
hma*_*ica 11
你可以使用 pdfTeX:
echo '\shipout\hbox{}\end' | pdftex
Run Code Online (Sandbox Code Playgroud)
它产生一个texput.pdf
大约 900 字节的空白单页,是 ImageMagick 使用的一半。
不过,这会让您受到 TeX 安装默认纸张大小的影响。要明确设置大小,您可以改为使用 LaTeX:
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
\begin{document}\shipout\hbox{}\end{document}' | pdflatex
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 Ghostscript 的 PDF 驱动程序,虽然方便的ps2pdf
脚本:
echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf
Run Code Online (Sandbox Code Playgroud)
它比 TeX 安静得多,但产生的输出不太紧凑(大约 2300 字节)。
在命令行上,您还可以使用命令ps2pdf
将PostScript文件转换为PDF;例如:
touch blank.ps && ps2pdf blank.ps blank.pdf
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40472 次 |
最近记录: |