2013-05-29 55 views
2

我正在編寫一個程序,使用Python的Reportlab庫生成PDF文件。基本上我有兩個要求:在Reportlab中生成指定DPI的PDF格式的打印版本

  1. Web版:RGB顏色,150 dpi的
  2. 打印版:CMYK色,300 dpi的

到目前爲止,我已經生成的PDF格式,並設置顏色爲CMYK/RGB。但我一直無法改變PDF文件的DPI。 reportlab是否提供了將dpi設置爲指定的功能。

此外,還可以接受任何可以在Linux終端上運行的程序,以便在pdf生成後轉換DPI。

回答

4

PDF的規範沒有本地DPI - 它大多都是基於矢量的(沒有向量的東西往往是你放在那裏的光柵化)。您嵌入的AKA圖像將被光柵化(除非您的圖像是vector/svg)。另一方面,pdf渲染器具有「dpi」設置。例如,您可以在Adobe Reader中更改默認的'dpi'(或pt-pi /每英寸點數)(我見過的大多數渲染器都支持此功能)。

Change Adobe Reader settings

如果你想300+「DPI」打印,你都基於矢量的內容,不用擔心它 - 打印店只是調整DPI他們結束和「咣!」即時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