Во-первых, спасибо всем, кто разместил здесь.
У меня есть маленький скрипт под названием pdfScale , в котором собраны части ответов, размещенных здесь.Поэтому я решил отправить обратно свои 2 цента.Я использую смесь ответов Курта и Тима.Больше похоже на Тима, хотя.Я играл с этим в течение нескольких дней, и вот мой частичный вывод о методах, размещенных здесь:
Установить размер бумаги по имени с помощью -sPAPERSIZE
- Легко передать имя бумаги (например, a4)
- Может не дать 100% точных размеров точек
- Может перевернуть пейзаж <> Портрет
Установите размер бумаги в точках PS -dDEVICEWIDTHPOINTS
, -dDEVICEHEIGHTPOINTS
- Обеспечивает получение нужного размера в пунктах
- Вы можете перевернуть ШИРИНУ <> ВЫСОТАВы сами
- Вам необходимо знать размеры в баллах
- Не так просто написать текст, так как вам потребуется новый размер страницы в пунктах, а также потребуетсяРазмеры страниц источника, если вы хотите определить альбомную / книжную ориентацию.
- Вы также можете установить пользовательские бумаги (любого размера, который вам действительно нужен).
- Я использовал
-dDEVICEWIDTH
, -dDEVICEHEIGHT
вместо более длинной версии очков, но они оба, кажется, делают одно и то же (оба получают очки).
Потому что мой ударСкрипт уже способен получать размеры исходной страницы, и мне понравилась идея установить пользовательские размеры страниц, я решил сосредоточиться на настройке размера страницы в пунктах.Я также уже включил GS Paper Sizes в свой сценарий (с именами и размерами).Таким образом, получить эту информацию также было легко.
Использование -dFIXEDMEDIA
представляется обязательным в обоих случаях, как указывалось ранее.
Вот как мой подход пошел (по сценарию)
- Получить исходные размеры страниц PDF (для обнаружения флип)
- Получите размер страницы цели в пунктах (например, A4> 595x842)
- Проверьте, имеют ли они одинаковую ориентацию или Flip Target, если необходимо
- Запустите GS с точками или перевернутыми точками
Когда я пытался исправить проблему с автоповоротом, Я нашел этот другой ответ Курта .Это об использовании -dAutoRotatePages
.Просто скопируйте часть его ответа здесь:
-dAutoRotatePages=/None
- сохраняет ориентацию каждой страницы; -dAutoRotatePages=/All
- поворачивает все страницы (или ни одной) в зависимости отсвоего рода «решение большинства»; -dAutoRotatePages=/PageByPage
- автоматически поворачивает страницы по отдельности.
Мой сценарий по умолчанию PageByPage
, но это настраивается.Это хорошо сработало в моих тестах.Использование -dAutoRotatePages
также, по-видимому, уменьшает необходимость предварительного изменения размера страницы, хотя это не одно и то же.Я сохранил оба варианта.
Мое маленькое приложение изначально было создано для масштабирования PDF-файлов (без изменения размера страницы).Затем я добавил функциональность для выполнения одного, другого или обоих.Я все еще не мог сделать все это за один вызов GS.
Это то, что я призываю изменить размер, меняя переменные на реальные значения.Это для формата A4 Portrait с автоматическим вращением PageByPage
:
gs \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dSubsetFonts=true -dEmbedAllFonts=true \
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \
-dAutoRotatePages='/PageByPage' \
-dFIXEDMEDIA -dPDFFitPage \
-sOutputFile='../myOutputFile.pdf' \
-f '../input.pdf'
Обратите внимание, что я также использую -dFIXEDMEDIA
AND -dPDFFitPage
.Поскольку это соответствует размеру страницы, другая часть моего сценария может быть удобной для масштабирования содержимого в PDF после изменения размера (особенно, если пропорция PDF сильно изменилась).И это одна из причин, по которым я всегда запускаю масштабирование после изменения размера в моем скрипте (в смешанном режиме).
По поводу проблем дроби при использовании имени бумаги, у меня это происходило до того, как я округлил преобразованияот мм / дюймов до точек.После того, как я начал их округлять, они, кажется, всегда нужны.Кажется странным, что GS поднимет эти значения.
Так что мой вывод заключается в том, что трудная часть состоит в том, чтобы найти решение, которое работает по всем направлениям на разных документах с разными размерами и ориентациями.Я все еще не уверен, что использую правильное решение.Но, позволяя пользователю изменить функцию «Обнаружение переворота» и «Автоповорот GS», я надеюсь найти решение по крайней мере для большинства случаев.
Я также перестроил большую часть кода в процессе, и теперь его довольно легко прочитать. Может быть полезно проверить это, если вы хотите автоматизировать такую задачу самостоятельно. Также полезно просто масштабировать / изменять размер PDF-файлов, конечно же:
https://github.com/tavinus/pdfScale
PS: pdfScale берет свое начало в этом потоке StackOverflow .