2013-05-29 3 views
2

Я пишу программу для создания PDF-файлов с использованием библиотеки Reportlab Python. В принципе у меня есть два требования:Создание печатной версии PDF с указанным DPI в Reportlab

  1. Веб-версия: RGB цвет, 150 точек на дюйм
  2. Версия для печати: CMYK цвета, 300 точек на дюйм

До сих пор я сгенерированные в формате PDF и установить цвет в CMYK/RGB. Но я не смог изменить DPI файла pdf. Предоставляет ли reportlab какую-либо функцию для задания заданного значения dpi.

Кроме того, любая программа, которая может запускаться на терминале Linux для преобразования DPI после создания PDF-файла, также может быть принята.

ответ

4

PDF-файл по спецификации не имеет родной DPI - это в основном все векторные (то, что не является векторным, часто то, что вы вкладываете туда, как растрированный). Изображения AKA, которые вы встроили, будут растрированы (если ваше изображение не является вектором/svg). У рендерера PDF с другой стороны есть настройки «dpi». Например, вы можете изменить значение по умолчанию «dpi» (или pt-pi/points per inch) в Adobe Reader (большинство рендерингов, которых я видел, поддерживают это).

Change Adobe Reader settings

Если вы хотите 300+ «» точек на дюйм для печати, и у вас есть все вектора на основе содержания, не беспокойтесь об этом - типография просто подстраивает точек на дюйм на их конце и «бац!» мгновенно 300+ dpi (теоретически они могут выбирать бесконечно высокий рендеринг dpi - славу векторных технологий).

Если у вас есть растровые изображения, вам нужно сделать некоторые математические вычисления для преобразования точек на дюйм в точки, где точки относятся к измерениям реального мира, независимо от носителя, на который вы смотрите. Чтобы упростить задачу, это соотношение 1: 1 (см. here, drawImage()). В общем, если вы хотите 300 dpi на принтере, и у вас есть изображение, которое, как вы знаете, вы хотите растянуть на 300 пунктов, и ваше изображение в данный момент установлено до 600 точек на дюйм, то вы знаете, что вам нужно встроить изображение в 1/2 размера его текущего размера (который может управляться drawImage(), где он принимает ширину/высоту kwargs). В качестве альтернативы, если у вас есть меньшее изображение и вы пытаетесь масштабировать размеры, это будет похоже на рисование на поверхности воздушного шара, а затем раздувание его - оно будет растянуто/искажено способами, которые вам не нужны (также лучше начать большие и уменьшать).

(источник PostScript Reference стр. 12)

Разрешение растрового устройства вывода является мерой количества пикселей на единицу расстояния вдоль двух линейных размеров. Резолюция, как правило, но не обязательно - то же самое горизонтально и по вертикали. Решения изготовлений по технологии устройства и компромиссы цены/производительность создают характерные диапазоны разрешения:

• компьютерные дисплеи имеют относительно низкое разрешение, обычно от 75 до 110 пикселей на дюйм.
• Принтеры с матричными матрицами обычно варьируются от 100 до 250 пикселей на дюйм.
• Ink-jet и лазерно-отсканированные технологии ксерографической печати способны к среднеразмерному выходам от 300 до 1400 пикселей на дюйм.
• Фотографическая технология допускает высокое разрешение 2400 пикселей на дюйм или более.

Более высокое разрешение дает лучшее качество и точность получаемого результата, , но достигается за счет более высоких затрат. По мере совершенствования технологии и снижения расходов на вычисления, продукты развиваются до более высоких разрешений.

Прочитайте этот ответ: previous image quality question

А вот OLD нить по этой теме, а также: previous thread on reportlab listserv

НТН

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