2017-02-09 2 views
0

В настоящее время я создаю определенную веб-страницу с использованием phantomjs, содержащей, среди прочего, два накладываемых изображения. После того, как PDF был сгенерирован, я масштабирую сгенерированный PDF до соответствующего размера - в настоящее время он уменьшен до примерно трети от исходного размера. При сравнении преобразованного PDF-файла phantomjs с тем, который был уменьшен, я могу ясно видеть, что изображения больше не выровнены (они находятся в преобразованном)Масштабирование PDF-файла с использованием результатов ghostscript при отсутствии изображений

Посмотрите увеличенное изображение (3200%, показать проблему подробно), где возникает проблема. Синее изображение (SVG) является наложенным на более темный (PNG) - оба идеально выровненные по правой стороне (белая область является частью PDF)) Converted

Однако при масштабировании изображения с помощью Ghostscript: gs -o /path/to/output.pdf -sDEVICE=pdfwrite -dPDFFitPage -r300x300 -g2676x2676 /path/to/input.pdf (не, даже если он получает вниз масштабируется, а не до масштабируется, изображения больше не выровнены: enter image description here

(Оба изображения размещены с position:absolute; right: 0;, так как выравнивание по правой стороне красиво)

.

Что может привести к такому поведению и как его избежать?

ответ

0

Поведение, возможно, происходит у потребителя PDF, а не в Ghostscript.

Сначала необходимо отметить, что при запуске PDF файл через Ghostscript и создать файл PDF с помощью pdfwrite устройства вы абсолютно не «изменение размера», «разукрупнение», «слияние» или любой другой термин, который подразумевает что содержание выходного файла PDF имеет какое-либо отношение к содержимому ввода.

«Обзор» here объясняет, почему, я предлагаю вам прочитать его.

Теперь я не могу сказать абсолютно точно, не видя PDF-файлы (которые вы нам не предоставили), но .. в сущности, вероятная причина заключается в том, что ошибки округления в арифметике означают, что изображения в выходном файле PDF не находятся в точно такое же положение, как и вход (и нет, нет способа избежать этого).

Когда вы увеличиваете масштаб изображения, вы изменяете матрицу трансформации тока, крошечные различия в арифметической точности координат умножаются на коэффициент масштабирования. Обычно пиксели «включены», если объект покрывает более половины пикселя, если масштабирование работает правильно, это может легко означать, что пиксель в верхнем изображении (при условии, что он ** является * изображением) едва ли более 1/2 пикселя, тогда как изображение ниже чуть меньше 1/2 пикселя. В результате вы видите несоответствие.

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

Смежные вопросы