主要參考這篇: Converting (any) PDF to black (K)-only CMYK - Stack Overflow (本機備份)
後來又參考了一堆雜七雜八的資料,最後才發現不用搞這麼複雜 ....
1 2 |
"C:\Program Files (x86)\gs\gs9.06\bin\gswin32c.exe" -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r300 -sOutputFile="SOURCE%02d.tif" "output.pdf" "C:\Program Files (x86)\ImageMagick-6.7.9-Q16\convert.exe" SOURCE*.tif END.pdf |
指令說明
- GhostScript 的 gswin32c 使用 tiffsep 這個 DEVICE 會將指定檔案分解成「版」的狀態,就像是
.tif 前面的 (Black) (Cyan) (Magenta) (Yellow) 就是 CMYK 一定會分離出來的檔案,一頁 PDF 產生五個檔案,最後一個檔案是完整的。 - -r300 是設定輸出的 DPI 解析度,正常印刷是 300 DPI ,在此因為要從向量重新取樣成點陣資料,要設定高些才會清楚,最差也要設定 300 DPI 才可。
- -sOutputFile 設定輸出檔名,%02d 表示使用 01, 02, 03 ... 97, 98, 99 這樣子的流水碼表示,實際使用依照 PDF 頁數設定。
- 分離出來之後,只用 (Black) 也是黑版就可以重新還原成 PDF 檔案,任務就完成了。在此使用的是 ImageMagick 的 convert 指令。
- For 迴圈主要是自動處理目錄內的所有 PDF 檔案,達到自動化目的,有空再來整理資料。
以上的方案在 Windows 實際運作是失敗的 ...... 請遺忘後繼續往下看 Orz
真正可運作方案: Linux
Windows 的批次檔我實在是搞不懂,第二次使用 convert 將 TIFF 還原成 PDF,可以在命令提示字元執行正常執行的指令,到了批次檔裡面就死活不執行,訊息是詭異的「這個時候不應有 .tif。」.... 意思其實就是找不到要輸入處理的 TIF 檔案。去拜了 Google 大神,沒人反應這個狀況,全世界應該是我第一個發現的,我又搶了全世界一次沙發了,可是我不想啊 ......
人的生命有限,我不想和 Windows 糾纏了,換到 Linux 平台,打開 php 用恍神的狀態馬上就寫好,並且可以順利運作,其中又踩到 Memory allocation failed 以及 No space left on device 的地雷,不過把 DPI 往下調整,實際列印看結果後,就蓋棺結案了,兩天了 ...我累了 ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $ls_command = 'ls *.pdf > pdf.list'; exec( $ls_command ); $handle = @fopen("pdf.list", "r"); if ($handle) { while (($buffer = fgets($handle, 1024)) !== false) { $filename = $buffer; $檔名切割 = explode( '.', $filename ); $主檔名 = $檔名切割[0]; $gs_command = 'gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r300 -sOutputFile="'. $主檔名 .'%02d.tif" "'. $主檔名 .'.pdf"'; exec( $gs_command ); $pdf_command = 'convert -limit memory 1mb -limit map 1mb '. $主檔名 .'*\(Black\).tif end-'. $主檔名 .'.pdf'; exec( $pdf_command ); unlink( $主檔名 .'.pdf' ); exec( 'rm *.tif' ); } } ?> |
移除裁切線範圍
在角落有裝訂時要對準的裁切線,一般 PDF 檔案應該是難得一見,不過在出版社看到的幾乎都是這種檔案 Orz
裁切線對於一般使用者並無意義,而且佔據版面位置、影響閱讀,所以最好是可以在轉檔時一併移除。
所以必須使用 ImageMagick 的 convert 來作裁切處理:
1 |
convert a01\(Black\).tif -crop 3504x4958+268+200 -crop 3504x4958-300-250 a01.tif |
- 舉例而說,a01(Black).tif 原圖尺寸為 3504x4958 ,使用 convert -crop 參數進行裁切動作,因為四邊都需要處理,所以需要使用兩次 -crop 參數
- 第一次的 -crop 參數使用 + 的方法, + 的動作是從指定左方、上方要內縮的距離,
- 第二次使用 - 的方法, 扣除右方、下方距離
需要注意的是,在我使用的版本 ImageMagick 6.5.4-8 ,在 -crop 指定的尺寸都是原圖尺寸,搜尋看到的其他網站在後面 - 的時候,都必須先減去 + 的尺寸,也就是其他的網站會寫成 -crop 3236x4758-150-175 ,不只尺寸扣除連後面的距離也除二 .... ,我就是看了其他網站的錯誤示範讓我卡關超久,請直接使用原圖尺寸然後該內縮多少、扣除多少直接寫會比較容易。
最後得到的 TIFF 檔案不能直接轉成 PDF 檔案,會出現我無法理解的怪頁面,所以中間又多了一次轉成 BMP 然後才轉成 PDF ...... ( 如果世界上沒有 BMP 我不知道該怎麼活了 = =a )
1,678 total views, 1 views today