Создать PDF из командной строки и заполнить страницу как можно большим количеством копий изображения?


2

Я много искал для этого, но не смог найти решение.

Как я могу создать PDF в произвольном бумажном формате (скажем, A4) и заполнить его страницы как можно большим количеством копий изображения?

Я ищу решение CLI, используя такие программы, как ImageMagick, Poppler, Ghostscript и тому подобное.

Мой пример использования: изменил пароль для гостей Wi-Fi в моем офисе, хотел разослать хороший PDF-файл формата А4, состоящий из плотной сетки, каждая ячейка, содержащая сетевой SSID и ключ WPA, должна быть распечатана, разрезана на части для гостей, посещающих.

Не смог найти способ сделать это и прибегнул к вставке крошечных изображений вручную на страницу с помощью MS Word.

РЕДАКТИРОВАТЬ: как выглядели эти крошечные изображения. Просто набрал в текстовом редакторе и сделал скриншот текста.

введите описание изображения здесь

Я буду менять этот пароль один раз каждые 3 месяца, поэтому я бы хотел автоматизированное решение с возможностью написания сценариев. Не нужно быть идеальным, но должно быть быстрым.

Ответы:


2

На основании размеров изображения и примера файла JPG, который вы разместили на свой вопрос , когда я щелкну правой кнопкой мыши на нем и выберу Сохранить изображение как ... , сохраненный файл отобразит список атрибутов изображения как. , ,

  • Размеры: 2850 x 1237
  • Ширина: 2850 pixels
  • Высота: 1237 pixels

введите описание изображения здесь

Мне удалось получить 24 из этих изображений, сжатых в один файл изображения, используя приведенные ниже методы / команды с ImageMagick, которые я опишу ниже. Хотя я не буду предоставлять логику для копирования числа «х» исходных изображений для получения ожидаемого результата, такие задачи тривиальны, и я буду считать, что вам не понадобится помощь или примеры для этой части как таковой - если это так, хотя бы просто дайте мне знать.


Подробные шаги. , ,

Напоминание: я не предоставил логику для копирования или удаления файлов, где я упомянул, что эти типы операций необходимы, и предполагаю, что вы можете решить это, но дайте мне знать иначе.

  1. Вы хотите , чтобы сделать несколько копий SSID и файл изображения WPA-ключ в /folderгде - то так у вас есть в общей сложности 6 изображений для запуска первой ImageMagick команды против.

  2. Когда эти 6 файлов изображений находятся в /folder, вы запустите эту команду для них, чтобы создать новый выходной файл с именем out.jpgв моем примере:

    convert /folder/*.jpg -gravity center -append /output/out.jpg
    
  3. Теперь вы удалите 6 оригинальных файлов "SSID и образ ключа WPA", а затем скопируйте новый out.jpgв /folderи затем скопируйте его, пока у вас не будет 4 файла /folder, и затем выполните эту команду:

    convert /folder/*.jpg -gravity center +append /output/nout.jpg
    
  4. Затем вы можете удалить 4 копии этих файлов, /outputкоторые вы скопировали для каждого # 3, а затем выполнить эту команду для вновь созданного nout.jpg, созданного с помощью вышеуказанной команды, чтобы получить файл в формате страницы a4:

    convert /output/nout.jpg -page a4 /output/print.jpg
    
  5. Теперь распечатайте print.jpgфайл изображения и убедитесь, что он выглядит хорошо, обрезан, вырублен и т. Д.

    введите описание изображения здесь

Примечание. Если размеры вашего изображения и тому подобное для начального изображения отличаются и не масштабируются должным образом с конечным результатом, вы захотите поиграть с числом «x» изображений на каждом шаге, на который я ссылался, а затем, как только вы запустите команда для этих изображений, вы хотите открыть соответствующие выходные файлы и проверить, можете ли вы определить число «х», которое должно быть для каждого шага. Тестирование может быть своевременным, но это еще одна тривиальная задача, которую так же легко понять.


Дополнительные ресурсы


@zool Я поиграл с montageнекоторыми вариантами, и изображения были размытыми, поэтому я перешел к другим методам. Я также не уменьшил размер исходного файла, чтобы уменьшить его, чтобы увидеть, как разместить более мелкие изображения на одном листе, но я предполагаю, что этого будет достаточно для базовой отправной точки, по крайней мере, для того, чтобы заставить вас заняться автоматизацией в скрипт и такой для вашей задачи.
Сок Pimp IT

1

Вы можете сделать это с помощью Pandoc и вывести PDF.

Первый метод: вставьте одну строку текста в Markdown, а не изображения в MS Word.

Вместо вставки изображения в документ MS Word, вы также можете вставить эту строку в текстовый файл, который вы будете называть my-markdown.md:

![](https://i.stack.imgur.com/l9TLd.jpg) { width="33%" }

Это поместило бы 3 изображения в строку. Конечно, вы можете изменить ширину на любое значение, которое вы хотите. Я предполагаю, что вы можете сделать с 60 одинаковыми строками при использовании width="33%"и со 112 одинаковыми строками при использовании width="24%"(4 изображения в строке).

Поскольку вам нужны «произвольные форматы бумаги (скажем, А4)» , я приведу вам пример почти А4 . Вы должны будете преобразовать это в PDF как это:

pandoc          \
  -o images.pdf \
  -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
     images.md 

Скриншот:

введите описание изображения здесь

Второй метод: сделать все это в одной командной строке

Поскольку сейчас у меня нет доступной системы Windows, поэтому я могу подтвердить и протестировать ее с помощью Powershellили cmd.exe, приведу пример Linux / macOS Bash:

for i in {1..112} ; do
    echo '![](https://i.stack.imgur.com/l9TLd.jpg){ width="24%" }' ;
done \
|    \
pandoc -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
       -o images2.pdf \
       -

Первая часть выше записывает одну и ту же строку 112 раз <stdout>, но передает ее в Pandoc <stdin>для дальнейшей обработки без записи файла Markdown.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.