Создать 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» изображений на каждом шаге, на который я ссылался, а затем, как только вы запустите команда для этих изображений, вы хотите открыть соответствующие выходные файлы и проверить, можете ли вы определить число «х», которое должно быть для каждого шага. Тестирование может быть своевременным, но это еще одна тривиальная задача, которую так же легко понять.


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

Сок Pimp IT
источник
@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.

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

Курт Пфайфл
источник