Niedawno potrzebowałem jednej pustej strony PDF (rozmiar 8,5 x 11 cali) i zdałem sobie sprawę, że nie wiem, jak zrobić ją z wiersza poleceń.
Wydanie touch blank.pdf
powoduje powstanie pustego pliku PDF . Czy istnieje narzędzie wiersza polecenia, które generuje pustą stronę PDF ?
command-line
pdf
Brian Fitzpatrick
źródło
źródło
Odpowiedzi:
convert
, narzędzie ImageMagick użyte w odpowiedzi Ketana, pozwala również napisać coś podobnegolub
lub (dla poziomego papieru A4)
itp. , bez tworzenia pustego pliku tekstowego. @chbrown zauważył, że tworzy to mniejszy plik pdf.
„xc:” oznacza „X Stały obraz”, ale tak naprawdę można go uznać za „x płótno”. Jest to sposób na określenie pojedynczego bloku koloru, w tym przypadku żadnego. Więcej informacji na stronie http://imagemagick.org/Usage/canvas/#solid, która jest „de facto” instrukcją dla ImageMagick. [uzupełnione informacjami z rurą] (Takie rzeczy
pdf:a
mogą być wykorzystane do jawnie zadeklarować format pliku.label:'some text'
,gradient:
,rose:
ilogo:
wydają się być inne przykłady specjalnych formatów plików).Anko zasugerowała opublikowanie tej modyfikacji jako osobnej odpowiedzi, więc to robię.
źródło
~/bin
Podobnie jak najmniejszy możliwy GIF , należy ręcznie opracować najmniejszy możliwy pusty plik PDF, ponieważ jest tak mały, że niepotrzebne, ale nieszkodliwe fragmenty metadanych stają się znaczną częścią rozmiaru pliku, a kompresja faktycznie powiększa . Wymaga to również starannego zwrócenia uwagi na reguły w specyfikacji PDF dotyczące tego, jakie bity struktury pliku są i nie są wymagane. (Czy wiesz, że obiekty strony muszą zawierać
/Resources
słownik, nawet jeśli jest pusty, ale nie muszą zawierać/Contents
strumienia?)Jeśli nie korzystasz ze strumieni obiektów PDF i strumieni odsyłaczy (co ma tę zaletę, że plik można w całości wydrukować w formacie ASCII), uważam, że najlepiej jest zrobić 317 bajtów. W przypadku kopiowania i wklejania, zwróć uwagę, że nie musi być spacją na wszystkich czterech wpisów tabeli odsyłaczy (granice pomiędzy
0 4
itrailer<<...
), i że nie jest nie ma być końcowy znak nowej linii po%%EOF
.Zastąpienie tabeli odsyłaczy ręcznie spreparowanym strumieniem odsyłaczy w wersji 1.5 sprawia, że plik jest nieco mniejszy, a cena nie jest już możliwa do wydrukowania w ASCII: 294 bajtów. (Ze względu na czytelność, nie mówiąc już o możliwości wpisania go, poniższy strumień odnośników został zrzucony heksadecymalnie, ale nie znajduje to odzwierciedlenia w słowniku strumieni. Aby odzyskać prawidłowy plik PDF, należy albo zastąpić zrzut heksowy odpowiadająca surowych bajtów binarnych, lub zmienić
/Length 15
na/Length 30/Filter/ASCIIHexDecode
i zaakceptować plik o długości 328 bajtów).Eksperymentowałem również z zawijaniem obiektów od 1 do 3 w strumień obiektów, ale to dodaje więcej narzutu niż oszczędza, nawet gdy strumień jest skompresowany.
Możliwe alternatywne sformułowanie strumienia odnośnika zewnętrznego to
Niestety, pomimo znacznych oszczędności w długości rzeczywistych danych strumienia, dodatkowe
/Index[1 4]
zjadają wszystkie oprócz jednego bajta oszczędności. Ponadto nie jest dla mnie jasne, czy wolno pozostawić obiekt 0 całkowicie poza plikiem. (Nie jest też dla mnie jasne, czy obiekt 0 musi mieć numer generacji -1. Jeśli nie jest to wymagane, faktycznie zapisujesz więcej bajtów za pomocą.)
Aby zmienić rozmiar papieru, zamień
612 792
na odpowiednią szerokość i wysokość, wyrażoną w punktach PostScript (72 punkty PostScript = 1 cal amerykański lub 25,4 milimetra). Na przykład595 842
dla A4. Możesz to osadzić w skrypcie powłoki, który wyrzuca pusty plik PDF o dowolnym rozmiarze papieru; jedyną trudną częścią byłoby upewnienie się, żestartxref
przesunięcie pozostaje dokładne, nawet jeśli zmieni się rozmiar obiektu 3.źródło
Jeśli masz
convert
(narzędzie ImageMagick) zainstalowane, możesz to zrobić:źródło
convert
ma również-size
opcję, za pomocą której można ustawić rozmiar wyjściowego pliku pdf.convert xc:none -page Letter a.pdf
bez tworzenia pustego pliku txt.(null)
błędów czcionek.convert.im6: improper image header
a.txt '@ error / txt.c / ReadTXTImage / 429. convert.im6: brak zdefiniowanych obrazówa.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
Dostarczone przez groff, najbardziej niedocenione oprogramowanie na świecie.
źródło
groff: can't find `DESC' file
wrazgroff:fatal error: invalid device `pdf'
z groff w wersji 1.22.2 na CentOS 7.2.bash 4.1.2
bieganiagroff 1.18.1.4
.bp
oznacza po prostu „stronę podziału”, dlatego powstaje 2-stronicowy dokument. Aby utworzyć jednostronicowy dokument, zrób jeszcze prostszeecho | groff -T pdf > blank.pdf
.echo .bp
rzeczywiście powinno zostać zastąpioneecho
, tak jak powiedziałMożesz użyć pdfTeX:
co daje pustą pojedynczą stronę
texput.pdf
o wielkości około 900 bajtów, co stanowi połowę tego, co wykorzystuje ImageMagick.To jednak stawia Cię na łasce domyślnego rozmiaru papieru w instalacji TeXa. Aby jawnie ustawić rozmiar, możesz zamiast tego przejść do LaTeX:
Jeszcze inną opcją byłoby użycie sterownika PDF Ghostscript, choć przydatny
ps2pdf
skrypt:co jest znacznie cichsze niż TeX, ale daje mniej zwartą moc wyjściową (około 2300 bajtów).
źródło
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
. Jest to nieco mniejszy, ma 2200 bajtów.echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
tworzyarticle.pdf
. Czy możliwe jest utworzenie goblank.pdf
bezpośrednio?-jobname <basename>
w wierszu poleceń.\shipout\hbox{}
lubshowpage
tworzy jedną stronę. Zarówno TeX, jak i Postscript mają konstrukcje zapętlające, których można użyć, ale prawdopodobnie łatwiej jest użyć wybranego języka skryptowego do powielenia polecenia odpowiednią liczbę razy.Prostym sposobem na utworzenie pliku PDF z pustą stroną jest użycie
rst2pdf
:po prostu echo w jednym miejscu nie zadziała, skończy się to plikiem PDF bez stron (co nie jest tym samym co pusty plik).
źródło
W wierszu polecenia wpisz:
polecenie
ps2pdf
służy do konwersji pliku PostScript na pdfźródło
ps2pdf blank.pdf
zwraca błąd, ponieważ oczekuje pliku Postscript jako argumentu. Drugie polecenie wymaga wcześniejszego istnieniafile.pdf
. Czy coś brakuje?touch blank.ps
.; 2ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
Na koniec, oto sposób Ghostscript na utworzenie pliku PDF pokazującego pustą stronę:
Rozmiar strony najprawdopodobniej będzie wynosił Letter. Jeśli chcesz A4, użyj tego:
Tło: po
-c
parametrze może być dowolny prawidłowy ciąg PostScript, który Ghostscript spróbuje zinterpretować. A pusta strona w PostScript jest reprezentowana przez ten krótki blok kodu:źródło