Автор Тема: Печать брошюры из PDF со смешанными портретными и альбомными листами  (Прочитано 4895 раз)

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 537
    • Email
Понадобилось распечатать брошюру из файла PDF с разноориентированными листами.
Как оказалось, evince/atril, adobe reader этого не могут. Портят готовые страницы оборачивая их своими не настраиваемыми и не отключаемыми полями, да и с ориентацией неадекватно работают.
Страницы в PDF можно предварительно повернуть в pdfedit, pdfmod, pdftk. Однако, pdfedit портит повёрнутый русский текст; pdfmod портит таблицу xref в выходном файле, кроме того вот совсем не хочется, чтобы в системе исполнялись ехе-файлы; pdftk — вроде нормально делает, но это всё-таки лишняя сущность.
Помог ghostscript.

Пример для печати портретных страниц формата а6 на альбомные листы а5:

Следующая команда сориентирует в указанное положение все страницы, если они ещё и разного размера, то смасштабирует и отцентрирует:
gs -q -dNOPAUSE -dBATH -P- -dSAFER -sDEVICE=pdfwrite -sOutputFile=oriented.pdf -dDEVICEWIDTHPOINTS=297 -dDEVICEHEIGHTPOINTS=420 -dFitPage -dFIXEDMEDIA -dAutoRotatePages=/None -dCompatibilityLevel=1.4 -f infile.pdf -c quit
где 297 и 420 пункты (1/72 дюйма), для стандартных форматов можно посмотреть в документации ghostscript (файл Use.htm), для нестандартных — рассчитать из сантиметров/миллиметров. Если требуется можно указать ширину больше чем высоту, тогда страницы будут повёрнуты в альбомную ориентацию.

Далее, полученный файл oriented.pdf пропускаем через конвейер:
pdf2ps -dLanguageLevel=3 oriented.pdf - | psbook | psnup -pa5 -W10.5cm -H14.8cm -l -2 | ps2pdf -sPAPERSIZE=a5 -dAutoRotatePages=/None -dCompatibilityLevel=1.4 - booklet.pdf
тут:
   -pa5 размер выходных листов (вместо этого можно указать как -w14.8cm -h21.0cm).
   -W10.5cm -H14.8cm размер входных листов (psnup не знает формат а6 и не понимает размеры в пунктах).
Вместо -sPAPERSIZE=a5 (при нестандартных размерах листа можно указать -dDEVICEWIDTHPOINTS=пунктов -dDEVICEHEIGHTPOINTS=пунктов).

Полученный файл booklet.pdf можно печатать уже с помощью тех же evince/atril, adobe reader, отключив масштабирование, поворот, центрирование.

Для работы требуются пакеты ghostscript-common, ghostscript-utils, psutils.

Файлы с примерами во вложениях. Может кому пригодится.
« Последнее редактирование: 18.11.2019 19:11:29 от stranger573 »

Оффлайн eugrus

  • Начинающий
  • *
  • Сообщений: 13
Любопытно!

Вот разъяснения от ChatGPT:

gs -q -dNOPAUSE -dBATH -P- -dSAFER -sDEVICE=pdfwrite -sOutputFile=oriented.pdf -dDEVICEWIDTHPOINTS=297 -dDEVICEHEIGHTPOINTS=420 -dFitPage -dFIXEDMEDIA -dAutoRotatePages=/None -dCompatibilityLevel=1.4 -f infile.pdf -c quit

Эта команда использует Ghostscript для конвертации PDF-файла infile.pdf в новый файл oriented.pdf, который будет в портретной ориентации с заданным размером страницы 297x420 мм (или формата A3).

Вот поэтапное описание команды:

gs - запускает Ghostscript
-q - запуск в quiet mode
-dNOPAUSE - отключает паузы между страницами
-dBATCH - отключает режим пакетной обработки
-P- - использует по умолчанию первый доступный принтер (или выводит ошибку, если принтер недоступен)
-dSAFER - запускает Ghostscript в "безопасном" режиме, который ограничивает доступ к файловой системе и системным ресурсам
-sDEVICE=pdfwrite - указывает Ghostscript использовать устройство вывода pdfwrite, которое записывает выходные данные в новый PDF-файл
-sOutputFile=oriented.pdf - задает имя выходного файла
-dDEVICEWIDTHPOINTS=297 - задает ширину страницы в единицах измерения points (1 point = 1/72 дюйма)
-dDEVICEHEIGHTPOINTS=420 - задает высоту страницы в points
-dFitPage - подгоняет содержимое PDF-файла к размеру страницы
-dFIXEDMEDIA - игнорирует любые установки размера страницы во входном файле
-dAutoRotatePages=/None - отключает автоматическое поворачивание страниц на основе содержимого
-dCompatibilityLevel=1.4 - устанавливает уровень совместимости PDF-файла
-f infile.pdf - указывает Ghostscript использовать infile.pdf как входной файл
-c quit - завершает Ghostscript после обработки входного файла
Таким образом, команда выполняет обработку PDF-файла infile.pdf и записывает результат в новый файл oriented.pdf, используя опции Ghostscript для управления размером страницы и другими параметрами.


pdf2ps -dLanguageLevel=3 oriented.pdf - | psbook | psnup -pa5 -W10.5cm -H14.8cm -l -2 | ps2pdf -sPAPERSIZE=a5 -dAutoRotatePages=/None -dCompatibilityLevel=1.4 - booklet.pdf

Эта команда выполняет несколько действий в цепочке обработки PDF-файла:

1. Конвертирует файл oriented.pdf в формат PostScript с помощью утилиты pdf2ps.
2. Использует утилиту psbook для переупорядочивания страниц в файле PostScript в порядке, который оптимален для печати на двух сторонах.
3. Использует утилиту psnup для размещения нескольких страниц PostScript на одном листе бумаги.
4. Конвертирует файл PostScript обратно в формат PDF с помощью утилиты ps2pdf.
В итоге получается файл booklet.pdf, который представляет собой книжку с размером страницы A5 и размещенными на каждой странице двумя изначальными страницами в порядке, оптимизированном для печати на двух сторонах.

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 121
  • ITS
Вот разъяснения от ChatGPT:
Пояснения от ChatGPT:
# ntfsclone --rescue --overwrite /dev/sda1 /path/to/backup.img

Эта команда создаст образ раздела /dev/sda1 и сохранит его в файл /path/to/backup.img.
Параметр --rescue позволяет продолжать операцию после обнаружения ошибок чтения,
что может быть полезно в случае возникновения проблем при клонировании раздела.

А это man  ntfsclone:
EXAMPLES
       Clone NTFS on /dev/hda1 to /dev/hdc1:

              ntfsclone --overwrite /dev/hdc1 /dev/hda1
...
Клонируйте NTFS с /dev/hda1 в /dev/hdc1:
Рисковано чатиком пользоваться ))
https://gov.cnews.ru/news/top/2024-04-01_kongress_ssha_udalit_ii-pomoshchnika

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 203
Рисковано чатиком пользоваться ))
Да, какая-то странная тенденция у молодых - лень набрать --help или man, но не лень запросить "высший разум"(chatGPT), наивно полагая, что он даст истинно верный ответ.

Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 2 973
  • Дмитрий/Dmitry/德米特里/दिमित्री
Вот разъяснения от ChatGPT:
Пояснения от ChatGPT:
Вывод:
Рисковано чатиком пользоваться ))
А то так совсем своими мозгами думать перестанем!!!

Оффлайн stranger573

  • Мастер
  • ***
  • Сообщений: 1 537
    • Email
А то так совсем своими мозгами думать перестанем!!!
Так называемый ИИ думать не может в принципе. Это всего лишь сортировочный агрегат, по подбору наиболее подходящего (по запрограммированным критериям) шаблона из нескольких заранее заложенных. Кажущаяся "умность" этого агрегата — всего лишь имитация. Не всё что выглядит этим является.

Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 2 973
  • Дмитрий/Dmitry/德米特里/दिमित्री
Так называемый ИИ думать не может в принципе. Это всего лишь сортировочный агрегат, по подбору наиболее подходящего (по запрограммированным критериям) шаблона из нескольких заранее заложенных. Кажущаяся "умность" этого агрегата — всего лишь имитация. Не всё что выглядит этим является.
Тот-же ChatGPT работает по принципу агрегации и выдачи "сборной солянки", т.е. и достоверных и откровенно бредовых данных из того-же самого Интернета!
Иными словами то, что когда-то написали в Интернете люди, то этот "искусственный интеллект" и выдаёт. :)
Надеюсь, что вот эту страницу и, конкретно, это сообщение этот "ИИ" проиндексирует и узнает о себе правду! ;-D
« Последнее редактирование: 02.04.2024 17:11:38 от gosts 87 »

Оффлайн ProfessorNavigator

  • Давно тут
  • **
  • Сообщений: 240
Так называемый ИИ думать не может в принципе. Это всего лишь сортировочный агрегат, по подбору наиболее подходящего (по запрограммированным критериям) шаблона из нескольких заранее заложенных. Кажущаяся "умность" этого агрегата — всего лишь имитация. Не всё что выглядит этим является.
Фу-ух. Мне последнее время начало казаться, что я один это понимаю. Спасибо, товарищи))