Сглаживание прозрачности PDF

11

У меня есть PDF, созданный с помощью Inkscape, в котором используются прозрачные цвета. Это изображение должно использоваться в документе LaTeX.

Хотя сохранение прозрачности удобно для редактирования, это может быть проблемой для печати. Печать обычно включает в себя преобразование PDF в PS. Поскольку Postscript не поддерживает прозрачность, это требует либо

  • выравнивание, то есть создание векторной графики, которая работает без прозрачности

или

  • растровое, то есть рендеринг растрового изображения.

Когда документ PDF, содержащий такую ​​фигуру, распечатывается (или конвертируется в PS) с использованием Evince (или Cairo или Ghostscript), вся страница отображается в виде растрового изображения, что делает уродливые шрифты (отличными от других страниц). (Adobe Acrobat хорошо обрабатывает такие PDF-файлы.)

К сожалению, преобразование фигур PDF в EPS (до их включения в LaTeX) мало помогает, потому что pdftops и pdf2ps (опять же, Cairo или Ghostscript) растеризуют изображение, то есть отображают растровое изображение (сохраненное как EPS). (Это немного лучше, потому что это не влияет на всю страницу, но я бы все же предпочел векторную графику.)

Как можно повысить прозрачность с помощью Inkscape или другого программного обеспечения в Linux?

январь
источник
2
Интересный вопрос. Было бы очень сложно сплющить SVG, так как каждое возможное пересечение фигур должно было бы создать новую непрозрачную форму с композитным заполнением.
artfulrobot
@artfulrobot Точно. Результирующая векторная графика может в целом стать довольно сложной. Однако для ряда типично векторных графических изображений результат все равно должен хорошо работать на современном принтере Postscript.
января
Лучший метод, который я нашел, - утомительный ручной, включающий перерисовку после начального шага: используйте inkscape, чтобы преобразовать ваш pdf в svg, откройте svg в хорошем текстовом редакторе. Замените все вхождения «opacity: [0] [0-9 \.]» На «opacity: 1» (версия регулярного выражения) или найдите «opacity: 0». и вручную заменить непрозрачностью 1 (утомительная версия). Откройте svg в inkscape и снова сделайте его красивым (сложная часть), затем вернитесь в pdf и в eps.
Крис Х

Ответы:

6

Одним из способов избежать плохой растеризации является ручное преобразование документа PDF в postscript, потому что когда вы вызываете CUPS через evince или любой другой графический интерфейс, он все равно будет конвертирован.

Вы можете попытаться pdftops -r 1200 document.pdfувеличить разрешение с минимального значения по умолчанию 300, а затем распечатать получившийся постскриптум. Однако при работе принтеров это не дало существенного улучшения. Обычный текст на страницах с прозрачными изображениями и без них по-прежнему выглядит по-разному - размыто или ясно.

Поэтому я использовал Acrobat Professional (на компьютере с Windows), чтобы сгладить прозрачные изображения, используемые в моем латексном документе, что дало оптимальные результаты. Проверьте, Transparency Flattener Presetнаходится [High Resolution]в продвинутой настройки печати. Мой коллега упомянул, что, возможно, можно передать файл PDF непосредственно на современный сетевой принтер LaserJet, минуя постскриптумное преобразование. Я не пробовал это.

Было бы здорово иметь Linux-решение для этой проблемы.

Фред Шон
источник
1

У меня была такая же проблема, и это мое решение (для дальнейшего использования):

Я пробовал много вещей, и до сих пор лучшее рабочее решение , которое я нашел в Интернете , полностью рендеринга PDF в виде изображения с pdf2psи ps2pdf13, но результат не был удовлетворительным для меня, потому что все векторные фигуры были потеряны. Я хотел визуализировать только критические части, но сохранить векторную графику.

Что помогло мне, так это изолировать все важные части в inkscape и поместить их в отдельный слой (в моих изображениях это были все тени). Я сделал видимым только этот слой (и фоновый слой) и экспортировал его в PNG, эффективно отрисовывая все эффекты прозрачности, но только их. Я импортировал его обратно и использовал в новом слое. После переворачивания всех уровней видимости (слой прозрачности: выкл., Все остальные: вкл.) Экспортированный PDF отлично работал с LaTeX и был пригоден для печати без отображения всей страницы в виде изображения.

TL; DR:

  1. Изолируйте все прозрачные пленки на один слой (маски прозрачности, тени и т. Д.)
  2. Сделать только проблемный слой и фон видимым
  3. Экспорт в PNG
  4. Импортируйте только что созданный PNG и используйте в качестве фона
  5. Сделайте все слои видимыми, кроме проблемного слоя
  6. Экспорт в PDF
  7. Улыбка :)
Эдгар
источник
0

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

brousch
источник
1
Проблема не в прозрачном фоне, и добавление белого фона не решает ее. В вопросе об изображении используются полупрозрачные формы поверх других (непрозрачных) фигур. SVG и PDF поддерживают это, а PS нет.
января
0

Я открыл файл PDF с помощью Ubuntu / Gimp и печатал одну страницу за раз, каждый раз проверяя предварительный просмотр.

гость
источник
-1
pdftops -origpagesizes input.pdf output.ps

затем

ps2pdf -r600x600 output.ps input-new.pdf
HinzundKunz
источник