2010-01-07 131 views
2

如果我有一個帶有特定RGB顏色的對象(文本,藝術線條)的PDF文件,並且我想將這些對象轉換爲具有特定的CMYK顏色,那麼可以使用哪些庫來實現這一點?如何將特定的RGB顏色更改爲PDF文件中的特定CMYK顏色?

請注意,我不需要從任意RGB值「映射」到「合適」CMYK值的能力 - 這些值是預先確定的。

.NET/C#首選,但我會考慮幾乎任何東西。

顯然我更喜歡免費/開放圖書館到付費圖書館,但取決於許可模式,我也會考慮付費圖書館。

回答

4

老實說?這是非常不平凡的。

PDF渲染是通過描述將按順序渲染的程序完成的。有一個圖形狀態可以累積程序所做的更改並標記頁面。

有許多不同的方式可以設置顏色。希望您的PDF文檔只使用設置RGB顏色的操作員RG和rg進行撫摸和不撫摸操作。這意味着,色操作將在以下形式:

rf gf bf RG 

其中Rf,GF,BF和漂浮表示顏色通道強度從0.0到1.0點號碼。

這將是一個重寫所有RG和rg操作符分別使用K和k的問題,它將使用4通道CMYK。

這本身就具有挑戰性,因爲您必須在所需的文檔/頁面中閱讀,解析內容流並重新編寫一個替換舊文檔的新文檔(再次,可能但並非微不足道 - PDF允許您通過在文件上添加新一代來替換單個對象,如內容流)。不要考慮使用SED。 PDF是依賴於文件佈局的,並且在不保持相同長度的情況下改變內聯格式會破壞PDF。

如果文件使用CS和cs運算符,則會出現真正的問題。考慮這樣的操作順序:

/DeviceRGB CS 1 0 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S 

此裝置設置的色彩空間到DeviceRGB,顏色設置爲紅色,移動到(0,0),線(200,200),中風(紅色),移至(200,200),移至(200,0),將顏色設置爲綠色和筆劃。

這不是那麼簡單 - 如果你想改變RGB紅到CMYK黃色,你可以這樣做:

/DeviceCMYK CS 0 0 1 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S 

這將爲黃色工作,但將打破嘗試設置爲綠色,因爲CS命令現在需要4個通道。

你需要做的是解釋內容流,跟蹤當前色彩空間是什麼,當CS命令來在具有要更改的顏色是什麼,你需要替換成/ DeviceCMYK CS CMYK SC,然後下一個rgb SC命令需要更改爲/ DeviceRGB CS rgb SC。

這不考慮如何處理基於ICC的顏色空間,灰度,LAB,n通道,顏色映射,模式,表單等。

PDF未被編輯。

如果我用使這種情況發生的任務,我會做到以下幾點:

  1. 如果是爲不到10個文件,我會在Illustrator中打開它們,改變顏色和導出爲PDF
  2. 如果是10以上且小於1000,我會聘請臨時工來做我在第1步中所做的事情。
  3. 如果是1000以上且小於10000,我會寫一個程序給腳本如果可能,Illustrator將進行這些更改。
  4. 如果它是10000或更多,並且正在進行,我會與管理層就文檔製作進行認真的討論,因爲如果需要對這種類型的更改進行終端文件格式並且無法正確重新生成。
+0

@Mr。霍利:我明白這是不平凡的,這就是爲什麼我要找一個圖書館:-) *有*庫在那裏將讀取PDF並提供一個高級API來修改它(或者說,寫出一個修改後的版本)。 iText庫就是一個例子,我用了很多。不幸的是,這不能做我在這裏尋找的那種操縱。另一個我看過的是PdfTron--它可以做這種事情 - 但我不喜歡他們的授權模式(也是,它太重量級了,我只需要這一個功能)。 – 2010-01-07 20:55:45

+0

不過,感謝您花時間把這個深思熟慮的答案放在一起。 +1 – 2010-01-07 20:56:58