Gần đây tôi cần một trang PDF trống duy nhất (kích thước 8,5 "x 11") và nhận ra rằng tôi không biết cách tạo một trang từ dòng lệnh.
Phát hành touch blank.pdf
tạo ra một tệp PDF trống . Có một công cụ dòng lệnh tạo ra một trang PDF trống không?
Gần đây tôi cần một trang PDF trống duy nhất (kích thước 8,5 "x 11") và nhận ra rằng tôi không biết cách tạo một trang từ dòng lệnh.
Phát hành touch blank.pdf
tạo ra một tệp PDF trống . Có một công cụ dòng lệnh tạo ra một trang PDF trống không?
Câu trả lời:
convert
, tiện ích ImageMagick được sử dụng trong câu trả lời của Ketan, cũng cho phép bạn viết một cái gì đó như
convert xc:none -page Letter a.pdf
hoặc là
convert xc:none -page A4 a.pdf
hoặc (đối với giấy A4 nằm ngang)
convert xc:none -page 842x595 a.pdf
vv , mà không tạo ra một tập tin văn bản trống. @chbrown nhận thấy rằng điều này tạo ra một tệp pdf nhỏ hơn.
"xc:" có nghĩa là "X Constant Image" nhưng thực sự có thể được coi là "x canvas". Đó là một cách để chỉ định một khối màu duy nhất, trong trường hợp này là không. Thông tin thêm tại http://imagemagick.org/Usage/canvas/#solid là hướng dẫn "thực tế" cho ImageMagick. [bổ sung thông tin từ ống] (Những điều như pdf:a
thể được sử dụng để khai báo một cách rõ ràng định dạng của một tập tin. label:'some text'
, gradient:
, rose:
và logo:
dường như là ví dụ khác về định dạng file đặc biệt.)
Anko đề nghị đăng bài sửa đổi này như một câu trả lời riêng biệt, vì vậy tôi đang thực hiện nó.
~/bin
Giống như GIF nhỏ nhất có thể, PDF trang trống nhỏ nhất có thể cần phải được xử lý bằng tay, bởi vì nó quá nhỏ để các siêu dữ liệu không cần thiết nhưng vô hại trở thành một phần quan trọng của kích thước tệp và nén thực sự làm cho mọi thứ lớn hơn . Nó cũng đòi hỏi sự chú ý cẩn thận đến các quy tắc trong đặc tả PDF về các bit của cấu trúc tệp là gì và không bắt buộc. (Bạn có biết rằng các đối tượng trang phải chứa một /Resources
từ điển, ngay cả khi nó trống, nhưng không bắt buộc phải bao gồm một /Contents
luồng?)
Nếu bạn không sử dụng đối tượng PDF 1.5 và các luồng tham chiếu chéo (có lợi thế là tệp có thể in hoàn toàn ASCII) Tôi tin rằng điều tốt nhất bạn có thể làm là 317 byte. Nếu sao chép và dán, hãy lưu ý rằng cần phải có một khoảng trắng ở cả bốn mục trong bảng tham chiếu chéo (các dòng giữa 0 4
và trailer<<...
), và không phải là một dòng mới cuối cùng sau %%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
Việc thay thế bảng tham chiếu chéo bằng luồng tham chiếu chéo v1.5 được tạo thủ công sẽ làm cho tệp nhỏ hơn một chút, với giá không thể in được ASCII: 294 byte. (Để dễ đọc, không đề cập đến việc có thể nhập nó vào, luồng xref bên dưới đã được hexdumped, nhưng điều này không được phản ánh trong từ điển luồng của nó. các byte nhị phân thô tương ứng hoặc thay đổi /Length 15
thành /Length 30/Filter/ASCIIHexDecode
và chấp nhận một tệp dài 328 byte.)
%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
Tôi cũng đã thử nghiệm gói các đối tượng 1 đến 3 vào một luồng đối tượng, nhưng điều này bổ sung lại nhiều chi phí hơn mức tiết kiệm, ngay cả khi luồng được nén.
Một công thức thay thế có thể của luồng xref là
4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj
Đáng buồn thay, mặc dù tiết kiệm đáng kể về độ dài của dữ liệu luồng thực tế, phần bổ sung /Index[1 4]
ăn hết tất cả trừ một byte tiết kiệm. Ngoài ra, tôi không rõ liệu bạn có được phép để đối tượng 0 hoàn toàn ra khỏi tệp hay không. (Nó cũng không rõ ràng với tôi cho dù đối tượng 0 phải có số thế hệ -1. Nếu đó là không cần thiết, bạn thực sự tiết kiệm nhiều hơn byte với
4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj
.)
Để thay đổi kích thước giấy, thay thế 612 792
bằng chiều rộng và chiều cao phù hợp, được biểu thị bằng điểm PostScript (72 điểm PostScript = 1 US inch hoặc 25,4 mm). Ví dụ, 595 842
đối với A4. Bạn có thể nhúng đoạn mã này vào tập lệnh shell tạo ra một tệp PDF trống với bất kỳ kích thước giấy nào mong muốn; phần khó khăn duy nhất là đảm bảo rằng phần startxref
bù vẫn chính xác ngay cả khi kích thước của đối tượng 3 thay đổi.
Nếu bạn đã convert
cài đặt (tiện ích ImageMagick), bạn có thể thực hiện việc này:
touch a.txt && convert a.txt -page Letter a.pdf
convert
cũng có một -size
tùy chọn mà bạn có thể sử dụng để đặt kích thước của pdf đầu ra.
convert xc:none -page Letter a.pdf
mà không tạo tập tin txt trống.
(null)
lỗi phông chữ nào .
convert.im6: improper image header
a.txt '@ error / txt.c / ReadTXTImage / 429. convert.im6: không có hình ảnh nào được xác địnha.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
Mang lại cho bạn bởi groff, phần mềm bị đánh giá thấp nhất thế giới.
groff: can't find `DESC' file
và groff:fatal error: invalid device `pdf'
với phiên bản groff 1.22.2 trên CentOS 7.2.
bash 4.1.2
chạygroff 1.18.1.4
.bp
chỉ là viết tắt của "break page", đó là lý do tại sao điều này tạo ra một tài liệu 2 trang. Để tạo một tài liệu 1 trang, chỉ cần làm đơn giản hơn echo | groff -T pdf > blank.pdf
.
echo .bp
thực sự nên được thay thế bằng echo
, giống như @FaheemMitha đã nói
Bạn có thể sử dụng pdfTeX:
echo '\shipout\hbox{}\end' | pdftex
trong đó tạo ra một trang trống texput.pdf
khoảng 900 byte, một nửa so với ImageMagick sử dụng.
Tuy nhiên, điều này đặt bạn vào vị trí của kích thước giấy mặc định của cài đặt TeX. Để đặt kích thước rõ ràng, bạn có thể truy cập LaTeX thay thế:
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
\begin{document}\shipout\hbox{}\end{document}' | pdflatex
Một tùy chọn khác sẽ là sử dụng trình điều khiển PDF của Ghostscript, mặc dù ps2pdf
tập lệnh tiện dụng :
echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf
vốn yên tĩnh hơn nhiều so với TeX nhưng tạo ra đầu ra nhỏ gọn hơn (khoảng 2300 byte).
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
. Cái này nhỏ hơn một chút, ở mức 2200 byte.
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
tạo ra article.pdf
. Có thể có nó tạo ra blank.pdf
trực tiếp?
-jobname <basename>
dòng lệnh.
\shipout\hbox{}
hoặc showpage
tạo một trang. Cả TeX và POSTcript đều có cấu trúc lặp mà bạn có thể sử dụng, nhưng có thể đơn giản hơn khi sử dụng ngôn ngữ kịch bản bạn chọn để sao chép lệnh một số lần thích hợp.
Trên dòng lệnh, gõ:
ps2pdf blank.pdf
lệnh ps2pdf
được sử dụng để chuyển đổi tập tin PostScript thành pdf
ps2pdf file.ps file.pdf
ps2pdf blank.pdf
trả về một lỗi, bởi vì nó mong đợi một tệp Postcript làm đối số. Và lệnh thứ hai yêu cầu có sẵn file.pdf
. Tui bỏ lỡ điều gì vậy?
touch blank.ps
.; 2 ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
Cuối cùng, không kém phần quan trọng, đây là cách Ghostscript để tạo tệp PDF hiển thị một trang trống:
gs -sDEVICE=pdfwrite -o empty.pdf -c showpage
Kích thước trang rất có thể sẽ là Thư. Nếu bạn muốn A4, sử dụng này:
gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage
Bối cảnh: các -c
tham số có thể được theo sau bởi bất kỳ chuỗi PostScript hợp lệ, mà Ghostscript sẽ cố gắng để giải thích. Và một trang trống trong PostScript được thể hiện bằng khối mã ngắn này:
%!PS
showpage