Недавно мне понадобилась одна пустая страница PDF (8,5 x 11 дюймов), и я понял, что не знаю, как ее создать из командной строки.
Выдача touch blank.pdf
выдает пустой файл PDF . Есть ли инструмент командной строки, который создает пустую страницу PDF ?
command-line
pdf
Брайан Фитцпатрик
источник
источник
Ответы:
convert
утилита ImageMagick, использованная в ответе Кетана, также позволяет писать что-то вродеили же
или (для горизонтальной бумаги формата А4)
и т.д. , без создания пустого текстового файла. @chbrown заметил, что это создает PDF-файл меньшего размера.
«xc:» означает «X Constant Image», но на самом деле его можно считать «x canvas». Это способ указать один блок цвета, в данном случае ни одного. Более подробная информация на http://imagemagick.org/Usage/canvas/#solid, которая является «фактическим» руководством для ImageMagick. [дополнены информацией из трубы] (вещи , как
pdf:a
можно использовать явно объявить формат файла.label:'some text'
,gradient:
,rose:
и , какlogo:
представляется, другие примеры специальных форматов файлов.)Анко предложил опубликовать эту модификацию в качестве отдельного ответа, поэтому я делаю это.
источник
~/bin
convert-im6.q16: not authorized 'blank.pdf' @ error/constitute.c/WriteImage/1037
, но нашел решение здесь: askubuntu.com/questions/1081895/… Публикация здесь на случай, если она поможет кому-либо, кто столкнется с той же проблемой.Как наименьшее возможное GIF , наименьший возможный пробел страниц PDF должен быть разработан вручную, потому что это настолько мало , что излишние но-безвредны биты метаданных становятся важной частью размера файла, а сжатие на самом деле делает все больше . Это также требует внимательного отношения к правилам в спецификации PDF о том, что такое биты файловой структуры, а какие нет. (Знаете ли вы, что объекты страницы должны содержать
/Resources
словарь, даже если он пустой, но не обязательно включать/Contents
поток?)Если вы не используете объектные потоки PDF 1.5 и потоки перекрестных ссылок (что дает преимущество в том, что файл может быть полностью печатным ASCII), я считаю, что лучшее, что вы можете сделать, - это 317 байт. При копировании и вставке обратите внимание, что на всех четырех записях таблицы перекрестных ссылок (строки между
0 4
иtrailer<<...
) должен быть завершающий пробел , и что после символа не должно быть заключительного символа новой строки%%EOF
.Замена таблицы перекрестных ссылок на созданный вручную поток перекрестных ссылок v1.5 делает файл немного меньше по цене, поскольку он больше не печатается в формате ASCII: 294 байта. (Для удобства чтения, не говоря уже о том, что он вообще может быть напечатан, приведенный ниже поток внешних ссылок был шестнадцатеричным, но это не отражено в словаре потоков. Чтобы восстановить действительный PDF-файл, необходимо либо заменить шестнадцатеричный код на соответствующие необработанные двоичные байты, или изменения
/Length 15
в/Length 30/Filter/ASCIIHexDecode
и принять файл , который имеет длину 328 байт.)Я также экспериментировал с переносом объектов с 1 по 3 в поток объектов, но это добавляет больше накладных расходов, чем экономит, даже когда поток сжат.
Возможной альтернативной формулировкой потока внешних ссылок является
К сожалению, несмотря на существенную экономию в длине фактических потоковых данных, дополнительные
/Index[1 4]
расходуют все, кроме одного байта экономии. Кроме того, мне неясно, разрешено ли вам полностью исключать объект 0 из файла. (Мне также неясно, должен ли объект 0 иметь номер генерации -1. Если это не требуется, вы фактически экономите больше байтов с помощью.)
Чтобы изменить размер бумаги, замените его
612 792
на соответствующую ширину и высоту, выраженные в точках PostScript (72 точки PostScript = 1 дюйм США или 25,4 миллиметра). Например,595 842
для A4. Вы можете встроить это в сценарий оболочки, который выдает пустой PDF-файл любого размера бумаги; единственной сложной задачей было бы убедиться, чтоstartxref
смещение остается точным, даже если размер объекта 3 изменился.источник
Если у вас установлена
convert
(утилита ImageMagick), вы можете сделать это:источник
convert
Также есть-size
опция, которую вы можете использовать, чтобы установить размер выходного PDF.convert xc:none -page Letter a.pdf
не создавая пустой текстовый файл.(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'
с groff версии 1.22.2 на CentOS 7.2.bash 4.1.2
бегgroff 1.18.1.4
.bp
просто означает «разрыв страницы», поэтому он создает двухстраничный документ. Чтобы создать одностраничный документ, просто сделайте еще прощеecho | groff -T pdf > blank.pdf
.echo .bp
самом деле должно быть замененоecho
, как сказалВы можете использовать pdfTeX:
который производит чистую одностраничную страницу
texput.pdf
размером около 900 байт, половину того, что использует ImageMagick.Тем не менее, вы получаете возможность использовать формат бумаги по умолчанию для вашей установки TeX. Чтобы установить размер явно, вы можете перейти к LaTeX:
Еще один вариант - использовать драйвер PDF Ghostscript, хотя это и удобный
ps2pdf
скрипт:который намного тише, чем 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 имеют циклические конструкции, которые вы можете использовать, но, вероятно, проще использовать язык сценариев по вашему выбору, чтобы дублировать команду соответствующее количество раз.Простой способ сделать PDF с пустой страницей, используя
rst2pdf
:просто эхом в одном месте не получится, в результате вы получите PDF-файл без страниц (который отличается от пустого файла).
источник
В командной строке введите:
команда
ps2pdf
используется для преобразования файла PostScript в pdfисточник
ps2pdf blank.pdf
возвращает ошибку, поскольку ожидает файл Postscript в качестве аргумента. А вторая команда требует уже существующейfile.pdf
. Я что-то пропустил?touch blank.ps
.; 2ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
И последнее, что не менее важно, вот способ Ghostscript для создания PDF с пустой страницей:
Размер страницы, скорее всего, будет Letter. Если вы хотите A4, используйте это:
Справочная информация: за
-c
параметром может следовать любая допустимая строка PostScript, которую Ghostscript попытается интерпретировать. И пустая страница в PostScript представлена этим коротким кодом:источник