最有可能的問題是,ImageMagick的是有渲染爲位圖的PDF通過Ghostscript,然後導出包裝在PDF文件中的位圖。沒有看到原始的我不能肯定地說,但如果原始包含JPEG圖像,那麼很可能你最後是兩次應用JPEG,或者只是簡單地渲染導致問題。
最好的辦法是使用一個工具,它可以簡單地將一個裁剪框應用到頁面上。例如,你可以用Ghostscript來做到這一點(它也可以用其他方式修改PDF,包括雙倍JPEG量化,所以要小心)。
gs -sDEVICE=pdfwrite \
-sOutputFile=cropped.pdf \
-dBATCH -dNOPAUSE \
-c "<</ColorImageFilter /FlateEncode>> setdistillerparams" \
-f <input.pdf> \
-c "[ /CropBox [ 0 0 100 100] /PAGES pdfmark" \
-f
-c
和-f
之間的第一部分告訴pdfwrite設備使用FlateEncode的彩色圖像,默認爲JPEG,使用Flate將確保你沒有得到量化塗抹兩次。
-c
和-f
之間的第二部分告訴pdfwrite設備將CropBox寫入文件並使其爲0,0至100,100。這些單位是PDF中的常用單位; 1/72英寸,你可以使用小數值。
我確定還有其他工具可以做到這一點,甚至更容易。
ImageMagick的'convert'命令在後臺使用Ghostscript將(可能的)矢量PDF頁面轉換爲柵格圖像。然後它將「trimbox」應用於圖像,並將整頁光柵圖像再次封裝到PDF頁面容器中。換句話說,你把整塊肉都改成了碎肉 - 而且沒有辦法讓你的整塊肉都回來。 (您必須使用避免柵格化的其他工具。) –