2

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

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

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

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

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

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

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

2 ответа2

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 а затем скопируйте его, пока в /folder не останется всего 4 файла, а затем выполните эту команду:

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


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

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>, но передает ее в <stdin> для дальнейшей обработки без записи файла Markdown.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .