在Reportlab中使用指定的DPI生成PDF的打印版本

时间:2013-05-29 01:39:46

标签: python linux django reportlab

我正在编写一个使用Python Reportlab库生成PDF文件的程序。基本上我有两个要求:

  1. 网络版:RGB颜色,150 dpi
  2. 打印版本:CMYK颜色,300 dpi
  3. 到目前为止,我已经生成了pdf并将Color设置为CMYK / RGB。但我无法更改pdf文件的DPI。 reportlab是否提供将dpi设置为指定的任何函数。

    此外,还可以接受任何可以在Linux终端上运行以在生成pdf后转换DPI的程序。

1 个答案:

答案 0 :(得分:4)

按照规范的PDF没有原生DPI - 它主要是所有基于矢量的(没有矢量通常是你放在那里光栅化的)。嵌入的AKA图像将被栅格化(除非您的图像是vector / svg)。另一方面,pdf渲染器确实具有'dpi'设置。例如,您可以更改adobe reader中的默认“dpi”(或pt-pi /每英寸点数)(我见过的大多数渲染器都支持此功能)。

Change Adobe Reader settings

如果您想要300+'dpi'进行打印,并且您拥有所有基于矢量的内容,请不要担心 - 打印店只调整其末端的dpi和'bam!'瞬间300+ dpi(理论上他们可以选择无限高的渲染dpi - 基于矢量的技术的荣耀)。

如果你有光栅化的图像,那么你需要做一些前期数学运算来将dpi转换为点,其中点与真实世界的测量值有关,无论你看到什么媒体。为了方便起见,它是1:1的关系(参见here,drawImage())一般情况下,如果你想在打印机上使用300dpi,并且你有一个你知道想要伸展300点的图像,那么当前图像设置为600 dpi然后你知道你需要将图像嵌入其当前尺寸的1/2尺寸(可以通过drawImage()控制它接受宽度/高度kwargs)。或者,如果你有一个较小的图像,并尝试向上扩展尺寸,它就像在气球表面上绘制然后膨胀它 - 它会以你不想要的方式拉伸/扭曲(也称为更好地开始大规模并缩小规模)。

(来源PostScript Reference第12页)

  

光栅输出设备的分辨率是数量的度量   沿两个线性尺寸的每单位距离的像素。   分辨率通常 - 但不一定 - 水平相同   垂直。制造商对设备技术和设备的决策   价格/性能权衡创造了特征范围   分辨率:

     

•电脑显示器的分辨率相对较低,   通常为每英寸75至110像素   •一般的点阵打印机   范围从每英寸100到250像素   •喷墨和激光扫描   静电印刷技术具有中等分辨率   输出每英寸300至1400像素   •摄影技术允许每英寸2400像素或更高的高分辨率。

     

更高的分辨率可以提高输出的质量和质量,   但是以更高的成本实现。随着技术的进步和改进   计算成本降低,产品演变为更高的分辨率。

阅读此回复:previous image quality question

以下是关于该主题的旧主题:previous thread on reportlab listserv

HTH