PDFSizeOPT是一個程序,用於將大型PDF文件轉換為小文件,而無需降低視覺質量或刪除交互式功能(例如超鏈接)。更具體地說,PDFSizeOpt是一個免費的跨平台命令行應用程序(用於Linux,Windows,MacOS和UNIX),並且是一系列最佳實踐,以優化PDF文件的大小,重點是從TEX和乳膠文檔創建的PDF。 PDFSizeOpt用Python編寫,因此有點慢,但是它將某些沉重的工作更快地(C,C ++和Java)依賴性卸載。
PDFSizeOpt不適用於您的PDF嗎?在此處報告問題:https://github.com/pts/pdfsizeopt/issues
向PDFSizeOpt的作者發送捐款:https://flattr.com/submit/auto?user_id=pts&url=https://github.com/pts/pts/pdfsizeopt
如果這是您第一次嘗試pdfizeopt,請按照以下說明進行操作。 (本節的更新於2023-02-15。)
使用X86處理器在現代Linux和Windows系統上安裝和運行PDFSizeOpt很容易。如果您有這樣的系統,請直接跳到以下部分之一(在Linux或Linux或安裝說明上使用以及在Windows上使用)。這將需要不到5分鐘。
在Mac上安裝和運行PDFSizeOpt很容易(支持使用Apple Silicon的Intel X86處理器和ARM處理器)。如果您有這樣的系統,請直接跳到MacOS (不使用Docker)上的“安裝說明”部分。這將需要不到5分鐘。
Alternatively (but not recommended because it's slower), it's possible to run pdfsizeopt within Docker on the following systems: Linux amd64, macOS 64-bit Intel x86 (amd64, x86_64), macOS 64-bit ARM (Apple Silicon, eg M1 or M2晶片).之後,直接跳到Linux和MacOS上的Docker的“安裝說明”和“使用”部分。最後一步將不到5分鐘。
如果您使用的是Linux,Windows或MacOS以外的其他操作系統(在具有Intel處理器的計算機上),嘗試PDFSizeOpt的最簡單方法是使用Linux,Windows或MacOS借用朋友的計算機,或者在雲中租用Linux VM。很難在其他類型的系統上運行PDFSizeOpt的原因是因為PDFSizeOpt具有一些必需的依賴性,其中一些是舊版本(例如Python 2.4--2.7,Ghostscript 9.05),因此您必須編譯正確版本的正確版本。依賴項首先,即使對於經驗豐富的黑客來說,這可能需要幾個小時,並且令人沮喪的反複試驗。
從技術上講,將PDFSizeOpt移向其他系統是有可能的(並使其易於安裝),但是PDFSizeOpt的作者沒有空閒時間來創建和維護此類端口。作為僅供參考的,請參閱#154關於移植到蘋果矽的情況。
沒有安裝程序,您需要在命令行中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
要在Linux系統上安裝PDFSizeOpt(使用體系結構i386或AMD64),請打開一個終端窗口並運行這些命令(沒有領先的$
):
$ mkdir ~/pdfsizeopt
$ cd ~/pdfsizeopt
$ wget -O pdfsizeopt_libexec_linux.tar.gz https://github.com/pts/pdfsizeopt/releases/download/2023-04-18/pdfsizeopt_libexec_linux-v9.tar.gz
$ tar xzvf pdfsizeopt_libexec_linux.tar.gz
$ rm -f pdfsizeopt_libexec_linux.tar.gz
$ wget -O pdfsizeopt.single https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
$ chmod +x pdfsizeopt.single
$ ln -s pdfsizeopt.single pdfsizeopt
要優化PDF,請運行以下命令:
~/pdfsizeopt/pdfsizeopt input.pdf output.pdf
如果輸入PDF具有許多圖像或大圖像,則PDFSizeOpt可能非常慢。您可以通過禁用PNGOUT(最慢的圖像優化方法)來加速它:
~/pdfsizeopt/pdfsizeopt --use-pngout=no input.pdf output.pdf
PDFSizeOpt在輸出目錄中創建了許多臨時文件(PSOTMP。*),但也可以自行清理。
可以在當前目錄之外優化PDF。為此,請在命令行中指定路徑名(包括目錄名稱)。
請注意,上面的命令也下載所有依賴項(包括Python和Ghostscript)。可以在您的軟件包管理器中安裝一些依賴項,但是這些步驟被認為是替代方案,更複雜,因此在這裡不涵蓋。
請注意,PDFSizeOpt在任何X86和AMD64 Linux系統上都可以完美運行。由於PDFSizeOpt僅使用其靜態鏈接的X86可執行文件,因此對LIBC,Linux發行版等沒有限制,並且它不使用任何外部命令(除了PDFSizeOpt,pdfSizeOpt,pdfsizeopt.single和pdfsizeopt_libexec/pdfsizeopt,PDFSizeOpt除外)。 PDFSizeOpt還可以在啟用Linux仿真層的X86 FreeBSD系統上完美工作。
為了避免鍵入〜/pdfSizeOpt/pdfSizeOpt,請在路徑(可能在您的〜/.bashrc中)添加“ $ home/pdfsizeopt”,打開一個新的終端窗口,然後命令pdfsizeopt從任何目錄中使用。
您也可以根據需要將pdfsizeOpt放在〜/pdfsizeOpt以外的目錄上。
此外,您可以安裝一些額外的圖像抗化器(請參閱下面的圖像優化器部分中的更多信息):
$ cd ~/pdfsizeopt
$ wget -O pdfsizeopt_libexec_extraimgopt_linux-v3.tar.gz https://github.com/pts/pdfsizeopt/releases/download/2017-01-24/pdfsizeopt_libexec_extraimgopt_linux-v3.tar.gz
$ tar xzvf pdfsizeopt_libexec_extraimgopt_linux-v3.tar.gz
$ rm -f pdfsizeopt_libexec_extraimgopt_linux-v3.tar.gz
沒有安裝程序,您需要在命令行(黑色命令提示符窗口)中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
創建文件夾C: pdfsizeopt,下載https://github.com/pts/pdfsizeopt/releases/download/2023-04-18/pdfsizeopt_win32exec-v9.zip文件c: pdfsizeopt pdfsizeopt.exe存在。
下載https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single並將其保存到c: pdfsizeopt,as C: pdfsizeopt pdfsizeopt pdfsizeopt.single。
要優化PDF,請運行以下命令:
C:pdfsizeoptpdfsizeopt input.pdf output.pdf
在命令行中,這是一個黑色命令提示符窗口,您可以通過啟動菜單 / run / cmd.exe啟動它,或在開始菜單中查找命令提示符。
(按鍵入時,按下選項卡以獲取文件名完成。)
由於您必須將輸入文件名鍵入完整的路徑名,因此建議創建一個具有簡短名稱(例如C: pdfs)的目錄,然後首先複製輸入PDF。
如果輸入PDF具有許多圖像或大圖像,則PDFSizeOpt可能非常慢。您可以通過禁用PNGOUT(最慢的圖像優化方法)來加速它:
C:pdfsizeoptpdfsizeopt --use-pngout=no input.pdf output.pdf
為了避免鍵入C: pdfSizeOpt pdfSizeOpt,將C: pdfsizeopt添加到(末端)系統路徑,打開一個新的命令提示室窗口,然後命令pdfsizeopt
從任何目錄中使用。
根據您的環境,帶有重音字符的文件名可能在pdfsizeopt的Windows版本中不起作用。為了安全起見,請確保您的輸入和輸出文件具有字母,數字,下劃線(_),dash( - ),dot(。)和plus(+)的名稱。 Backslash()和斜線(/)都可以作為目錄分離器。
文件名和路徑名中的空格應該可以工作,但是您需要在名稱周圍放置雙引號(“)。
具有一些標點符號字符(例如Double Quote(“),問號(?)和Asterisk( ))和非打印字符(例如newline)(例如Newline)的文件名(例如Double Quote(”)不起作用。這是因為Windows不支持這些字符([[[[[[[[[[[[[[[ x00 .. x1f“ :<>?| x7f]完全在文件名中,它使用/和作為目錄saparator。
您也可以將PDFSizeOpt放在C: pdfsizeopt以外的其他目錄上,但是如果有whitespace或任何文件夾名稱中都有重音字符,則它將起作用。
請注意,PDFSizeOpt在葡萄酒中運作良好(在Ubuntu Lucid上使用Wine-1.2測試,在Ubuntu Trusty上進行了Wine-1.6.2),但比本地運行(作為Linux或Unix程序)要慢一點。
這些說明在以下系統上工作:Linux AMD64,MACOS 64位Intel X86(AMD64,X86_64),MacOS 64位臂(Apple Silicon,EG M1或M2芯片)。 Linux或MacOS的版本無關緊要(Macos Leopard 10.5也可以使用舊系統,只要它已安裝和工作。
Docker Image PTSPTS/PDFSIZEOPT中的程序用於Linux I386(32位Intel X86),即使使用Apple Silicon,這些二進製文件也恰好在上面提到的所有平台中工作。 (在2023-02-21上進行了測試。)
沒有安裝程序,您需要在命令行中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
首先,檢查您是否已通過運行此命令並在結尾檢查確定來正確安裝了Docker:
docker version && echo OK
如果您不正常,因為找不到“ docker”命令,則不會將Docker安裝到您的計算機上。安裝說明(2023-02-22):
要在Linux上安裝Docker,您有兩個選項:Docker Engine(https://docs.docker.com/engine/install/,在服務器部分中)或Docker Desktop(https://docs.docker.com/ desktop/ install/linux-install/)。他們中的任何一個都可以工作。
要在MacOS上安裝Docker,請安裝Docker Desktop(https://docs.docker.com/desktop/install/mac-install/)。
然後(在MacOS上),通過運行以下命令將docker
命令添加到您的路徑中(複製,請勿輸入,以避免錯字):
(echo; echo 'export PATH="/Applications/Docker.app/Contents/Resources/bin:$PATH"') >>~/.profile
然後(在MacOS上),關閉終端應用程序,然後再次打開(以便更改為〜/.profile生效)。
安裝後,在上面重試docker version
命令。
刪除PDFSizeOpt的任何以前的Docker圖像:
docker image rm ptspts/pdfsizeopt
進行測試優化運行,該運行練習PDFSizeOpt的所有依賴性:
curl -L -o deptest.pdf https://github.com/pts/pdfsizeopt/raw/master/deptest/deptest.pdf
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt pdfsizeopt deptest.pdf
如果您收到(無害的)警告信息
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
,並且您不想再次獲得它,然後在-it
: --platform linux/amd64
:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it --platform linux/amd64 ptspts/pdfsizeopt pdfsizeopt deptest.pdf
要優化PDF,請運行此命令:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt pdfsizeopt input.pdf output.pdf
如果輸入PDF具有許多圖像或大圖像,則PDFSizeOpt可能非常慢。您可以通過禁用PNGOUT(最慢的圖像優化方法)來加速它:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt pdfsizeopt --use-pngout=no input.pdf output.pdf
PDFSizeOpt在輸出目錄中創建了許多臨時文件(PSOTMP。*),但也可以自行清理。
可以在當前目錄之外優化PDF。為此,請在命令行中指定路徑名(包括目錄名稱)。
為避免輸入長命令,請運行
(echo '#! /bin/sh'; echo 'exec docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt pdfsizeopt "$@"') >pdfsizeopt && chmod 755 pdfsizeopt
,然後將PDFSizeOpt腳本複製到您的路徑,然後打開一個新的終端窗口,現在此命令也將有效地優化PDF:
pdfsizeopt input.pdf output.pdf
請注意,PTSPTS/PDFSIZEOPT DOCKER映像很少更新。要使用PDFSizeOpt的更新版本,請運行以下命令以下載:
curl -L -o pdfsizeopt.single https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
chmod +x pdfsizeopt.single
然後運行此命令以優化PDF:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt ./pdfsizeopt.single --use-pngout=no input.pdf output.pdf
如果要在Linux上包含額外的圖像優化器,請在上面的命令中使用ptspts/pdfsizeopt-with-extraimgopt代替ptspts/pdfsizeopt。例子:
docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it ptspts/pdfsizeopt-with-extraimgopt pdfsizeopt --use-image-optimizer=sam2p,jbig2,pngout,zopflipng,optipng,advpng,ECT input.pdf output.pdf
這些說明與MacOS Catalina 10.15(甚至更老,也許是Macos Snow Leopard 10.6)一起使用Macs-Macos Ventura 13(甚至更新),擁有64位ARM處理器(Apple Silicon)或64位Intel X86( X86_64,AMD64)處理器。這些程序是針對64位Intel X86處理器編輯的,並且使用MacOS中的Rosetta 2仿真,也可以在64位ARM處理器上工作。對這些說明進行了測試,並知道在MacOS Ventura 13.3上使用,均為64位Intel X86(X86_64,AMD64)處理器和Apple Silicon(ARM處理器)。
如果您有一個較舊的Mac運行Mac OS X Leopard 10.5 -MacOS Mojave 10.14,請按照舊MacOS上的“安裝說明”進行操作。
這些說明尚未測試。有關進度更新,請參見#154。
沒有安裝程序,您需要在命令行中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
要在MacOS系統上安裝PDFSizeOpt,請打開一個終端窗口並運行這些命令(沒有領先的$
):
$ mkdir ~/pdfsizeopt
$ cd ~/pdfsizeopt
$ curl -L -o pdfsizeopt_libexec_darwin.tar.gz https://github.com/pts/pdfsizeopt/releases/download/2023-04-18/pdfsizeopt_libexec_darwinc64-v9.tar.gz
$ tar xzvf pdfsizeopt_libexec_darwin.tar.gz
$ rm -f pdfsizeopt_libexec_darwin.tar.gz
$ curl -L -o pdfsizeopt.single https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
$ chmod +x pdfsizeopt.single
$ ln -s pdfsizeopt.single pdfsizeopt
進行測試優化運行,該運行練習PDFSizeOpt的所有依賴性:
$ curl -L -o deptest.pdf https://github.com/pts/pdfsizeopt/raw/master/deptest/deptest.pdf
$ ~/pdfsizeopt/pdfsizeopt deptest.pdf
...並打開(查看)deptest.pdf和相應的優化deptest.pso.pdf。
要優化PDF,請運行以下命令:
~/pdfsizeopt/pdfsizeopt input.pdf output.pdf
如果輸入PDF具有許多圖像或大圖像,則PDFSizeOpt可能非常慢。您可以通過禁用PNGOUT(最慢的圖像優化方法)來加速它:
~/pdfsizeopt/pdfsizeopt --use-pngout=no input.pdf output.pdf
另外,如果您有32位Mac,則與PDFSizeOpt捆綁的PNGOUT無法正常工作(因為它需要64位Mac),因此您必須強制強制 - use-pngout = no。有關PNGOUT的替代方案,請參見“截面圖像優化器” 。
PDFSizeOpt在輸出目錄中創建了許多臨時文件(PSOTMP。*),但也可以自行清理。
可以在當前目錄之外優化PDF。為此,請在命令行中指定路徑名(包括目錄名稱)。
請注意,上面的命令也下載了大多數依賴項(包括Ghostscript,但不包括Python)。一切都應該按照上面的指示起作用。如果您遇到問題,請在https://github.com/pts/pdfsizeopt/issues上報告一個問題。
為了避免鍵入〜/pdfSizeOpt/pdfSizeOpt,請在路徑(可能在您的〜/.bashrc中)添加“ $ home/pdfsizeopt”,打開一個新的終端窗口,然後命令pdfsizeopt從任何目錄中使用。
您也可以根據需要將pdfsizeOpt放在〜/pdfsizeOpt以外的目錄上。
這些說明應適用於運行Mac OS X Leopard 10.5-MacOS Mojave 10.14,並具有32位或64位Intel X86處理器的較舊的Mac。這些程序是針對32位Intel X86(i386)處理器編譯的(還使用MacOS Mojave 10.14或更早的MacOS Mojave上的64位Intel處理器),除了PNGOUT工具,它至少需要Mac OS X Snow Leopard 10.6和64位英特爾處理器。
沒有安裝程序,您需要在命令行中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
要在較舊的MacOS系統上安裝PDFSizeOpt,請打開一個終端窗口並運行這些命令(沒有領先的$
):
$ mkdir ~/pdfsizeopt
$ cd ~/pdfsizeopt
$ curl -L -o pdfsizeopt_libexec_darwin.tar.gz https://github.com/pts/pdfsizeopt/releases/download/2023-04-18/pdfsizeopt_libexec_darwin-v9.tar.gz
$ tar xzvf pdfsizeopt_libexec_darwin.tar.gz
$ rm -f pdfsizeopt_libexec_darwin.tar.gz
$ curl -L -o pdfsizeopt.single https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
$ chmod +x pdfsizeopt.single
$ ln -s pdfsizeopt.single pdfsizeopt
進行測試優化運行,該運行練習PDFSizeOpt的所有依賴性:
$ curl -L -o deptest.pdf https://github.com/pts/pdfsizeopt/raw/master/deptest/deptest.pdf
$ ~/pdfsizeopt/pdfsizeopt deptest.pdf
...並打開(查看)deptest.pdf和相應的優化deptest.pso.pdf。
要優化PDF,請運行以下命令:
~/pdfsizeopt/pdfsizeopt input.pdf output.pdf
如果輸入PDF具有許多圖像或大圖像,則PDFSizeOpt可能非常慢。您可以通過禁用PNGOUT(最慢的圖像優化方法)來加速它:
~/pdfsizeopt/pdfsizeopt --use-pngout=no input.pdf output.pdf
另外,如果您擁有帶有32位Intel X86處理器的Mac,則與PDFSizeOpt捆綁的PNGOUT無法使用(因為它需要64位處理器),因此您必須強制強制 - use-pngout = no。有關PNGOUT的替代方案,請參見“截面圖像優化器” 。
PDFSizeOpt在輸出目錄中創建了許多臨時文件(PSOTMP。*),但也可以自行清理。
可以在當前目錄之外優化PDF。為此,請在命令行中指定路徑名(包括目錄名稱)。
請注意,上面的命令也下載了大多數依賴項(包括Ghostscript,但不包括Python)。一切都應該按照上面的指示起作用。如果您遇到問題,請在https://github.com/pts/pdfsizeopt/issues上報告一個問題。
為了避免鍵入〜/pdfSizeOpt/pdfSizeOpt,請在路徑(可能在您的〜/.bashrc中)添加“ $ home/pdfsizeopt”,打開一個新的終端窗口,然後命令pdfsizeopt從任何目錄中使用。
您也可以根據需要將pdfsizeOpt放在〜/pdfsizeOpt以外的目錄上。
沒有安裝程序,您需要在命令行中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
PDFSizeOpt在啟用Linux仿真層的X86 FreeBSD系統上完美工作。因此,在FreeBSD系統上啟用Linux仿真層,然後按照Linux上的安裝說明和使用。
一定程度地,您可以按照通用Unix的安裝說明和用法進行使用,但是您需要更多的工作(這是不方便且容易出錯的),因為您需要單獨安裝許多依賴項,可能會從源中編譯其中的一些依賴項。
在2023年,這樣做越來越困難,因為PDFSizeOpt需要Python 2.4--2.7和Ghostscript 9.05,都非常舊,因此很難安裝到現代系統中。
沒有安裝程序,您需要在命令行(黑色命令提示符窗口)中運行一些命令才能下載和安裝。 PDFSizeOpt是一個僅命令行應用程序,沒有GUI。
pdfizeopt是一個python腳本。它可以與Python 2.4、2.5、2.6和2.7一起使用(但與Python 3.x無效)。因此,請先安裝Python。
創建一個名為PDFSizeOpt的新目錄,然後在此處下載此鏈接:https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
將其重命名為PDFSizeOpt,並通過運行以下命令(沒有領先的$
)來使其可執行:
$ cd pdfsizeopt
$ mv pdfsizeopt.single pdfsizeopt
$ chmod +x pdfsizeopt
如果您的python可執行文件不是/usr/bin/python,請相應地在pdfsizeopt腳本中編輯第一行(以#!
開始)。
嘗試:
$ ./pdfsizeopt --version
info: This is pdfsizeopt ZIP rUNKNOWN size=105366.
PDFSizeOpt具有許多依賴關係。對於完整的功能,您需要所有功能。盡可能多地安裝它們,然後將它們放在路徑上。
依賴性:
imgdataopt
程序文件複製為sam2p
(例如/usr/usr/usr/local/bin/bin/ sam2p)小路。如果您無法安裝它,請使用pdfsizeopt -do-optimize-images = no。一些Linux分佈有SAM2P二進製文件,但它們往往太老了。另外,SAM2P> = 0.49.3 + PNG22PNM也可以使用IMGDATAOPT,但是IMGDATAOPT更容易安裝。安裝後,使用PDFSizeOpt為:
$ ./pdfsizeopt input.pdf output.pdf
您可以將包含PDFSizeOPT的目錄添加到路徑中,因此命令pdfsizeopt
將從任何目錄起作用。
PDFSizeOpt可以使用以下外部工具在嵌入式PDF文件中製作圖像較小:
要啟用或禁用任何映像優化器,請指定您要啟用這樣的所有圖像優化器: - use-image-optimizer = optipng,jbig2。這也將禁用默認的pngout。
您還可以通過指定單獨的,附加的 - use-image-optimier = flags來指定自定義圖像優化器命令模式:
--use-image-optimizer="optipng %(sourcefnq)s -o6 -fix -force %(optipng_gray_flags)s-out %(targetfnq)s"
您始終必須在命令模式中指定%(targetFNQ)。
指定-do-debug-image-optimizers =是的,查看啟用了哪個圖像優化器(以及其當前運行的完整命令行)。
在啟動時,PDFSizeOpt檢查了請求的圖像優化器是否可用(作為程序文件),並且如果其中一些丟失,則會失敗。要忽略那些缺少的內容,指定 - do-require-image-optimizers = no。
安裝圖像優化器並將其添加到路徑上是您(用戶)的責任。如果您遵循上面的Windows和Linux的安裝說明,將為您安裝默認圖像優化器(SAM2P,JBIG2和PNGOUT)。對於Linux,上面還有有關額外圖像優化器(Zopflipng,optipng,advpng和ect)的安裝說明。
指定 - do-unify-fonts = no and - do-do-do-regenerate-all-fonts = no。
如果仍然失敗,請指定-do-optimize-fonts = no。
無論哪種情況,請在https://github.com/pts/pdfsizeopt/issues上報告
指定-do-optimize-images = no。
請在https://github.com/pts/pdfsizeopt/issues上報告
指定 - use-pngout = no。該禁用PNGOUT,這是圖像的最慢優化步驟。
請在https://github.com/pts/pdfsizeopt/issues上報告,附加輸入PDF文件和PDFSizeOpt的控制台輸出。您的報告非常感謝。
如果PDFSizeOpt以未知的例外退出,則可能會在當前目錄中留下一些臨時文件(PSOTMP。*)。您可以刪除這些文件。
請注意,PDFSizeOpt在處理損壞的PDF文件(即不符合PDF標準的PDF文件)方面沒有彈性。因此,如果PDFSizeOpt失敗,則原因可能是PDFSizeOPT中的錯誤或損壞的PDF輸入文件。但是,請報告一個問題(請參見上文)。
請在https://github.com/pts/pdfsizeopt/issues上報告,附加輸入PDF文件和輸出PDF文件(.pso.pdf)和PDFSizeOpt的控制台輸出。您的報告非常感謝。
如果文件名或完整路徑名包含除了ASCII字母(AZ和AZ),Digits(0-9),下劃線(_),ASCII DASH( - ),Plus(Plus(+),Dot(。 ),Backslash()或斜線(/)。通常這些字符不起作用:
空格和標籤:這很容易修復,只需將文件名包裝在雙引號(“),通常的方式。
雙引號(“):這是不可能發生的,不允許Windows上的文件名包含雙引號。如果您需要將其帶有雙引號的非FILENAME參數傳遞給PDFSizeOpt,請執行此操作。引號(“) ,用“替換所有雙引號(”),(與上一個替換平行)替換序列backslashes()和double Quote()和一個雙引號(“),通過複製後斜切並替換雙引號( “)聽起來很複雜,但這也是其他程序的通常方式,請參見https://stackoverflow.com/a/4094897/97248。
newlines和其他非空間空間:這是行不通的,Windows命令提示符(cmd.exe)不允許這些字符在命令行參數中。另外,Windows不允許它們在文件名中。
重音字符(例如Á和ő)。這些字符無法正常工作(或者可能僅適用於某些字符,具體取決於活動代碼頁面)在命令行中指定的PDF文件名或PDFSizeOpt的完整路徑名中(因此,請勿將PDFSizeOpt安裝到C: :: bőr,它行不通)。
重音字符(活動代碼頁面之外)將無法在PDFSizeOpt的完整路徑名中使用(例如C:bőr pdfsizeopt.exe)。這是因為Python無法以其名稱的重音字符調用外部程序(OS.System,OS.Popen,OS.Spawnl和subprocess.call),因為它使用了單字節API。
任何不可ASCII可打印的東西(33至126之間的代碼,包括):如果不介紹,則可能無法使用。請參閱重音字符的描述。
如果某些文件名仍然不起作用,那麼解決方法是:
PDF文件名中的重音字符可以通過以下方式進行工作(作為PDFSizeOpt的未來改進工作):
pdfsizeopt.exe應調用16位API(getCommandlinew),而不是單字節API(getCommandlinea)以獲取參數
pdfsizeopt.exe應該逃脫參數中的非ASCII字符(例如u+12ab)
pdfsizeopt.exe應該像這樣運行pdfsizeopt.single:
.../pdfsizeopt_win32Exec/pdfsizeopt_python.exe .../pdfsizeopt.single -args-u+ ...
PDFSizeOpt Python代碼應識別-args-u+,並且在找到文件名時,應將其轉換為Unicode(通過將ASCII保留除U+12AB以外),並且它應該將Unicode類型的值傳遞到打開(... ) 。這樣的開放(...)在窗戶上的Python 2.6中起作用。
顯示文件名時,PDFSizeOpt Python代碼仍應顯示u+12AB逃逸的ASCII。因此,不需要Win32Console模塊。因此,文件名將在命令提示符窗口中坦率但錯誤地顯示(不是副本)。
在輔助程序(例如GS,SAM2P)的命令行中不需要逃脫,因為這全是ASCII,因為文件名都是自動化的臨時FIL名稱,它們都是ASCII,並且需要PDFSizeOpt本身的路徑。
可以以這種方式使PDFSizeOpt的路徑名中的重音字符(作為對PDFSizeOpt的未來改進工作):
首先在文件名中執行重音字符。
pdfsizeopt.exe應該使用wgetCWD獲取當前目錄。
pdfsizeopt.exe應該使用wchdir更改為pdfsizeopt.single目錄。
pdfsizeopt.exe應使用wputenv將目錄pdfsizeopt_win32Exec和pdfsizeopt_win32Exec/pdfsizeopt_gswin使用。
pdfsizeopt.exe應該像這樣運行pdfsizeopt.single:
pdfsizeopt_python.exe pdfsizeopt.single --args-u+ --cwd=... ...
,其中-CWD =的值是WGETCWD結果的Esced(U+12AB)版本。
如果是相對的,則PDFSizeOpt Python代碼應預先將-CWD = ...的值預先為輸入文件名。
如果存在-CWD = ...,則PDFSizeOpt Python代碼不應修改路徑。 (此環境變量在Python 2.6中是否有效??讓我們嘗試一下!)
確實,在外部程序的命令行(例如GS,SAM2P)中不需要逃脫,因為這都是ASCII,因為臨時文件名都是ASCII,並且需要PDFSizeOpt本身的路徑。如果臨時目錄的路徑名(溫度變量)需要逃脫,則需要逃脫。
此錯誤發生在Windows XP系統上。解決方案:下載msvcr90.dll(或在系統上的某個地方找到它),然後將其複製到pdfsizeopt_win32exec(python26.dll旁邊)。 MSVCR90.dll的任何版本都可以工作:
當文件microsoft.vc90.crt.manifest中缺少pdfsizeopt_win32Exec目錄時,此錯誤已在Windows XP系統上發生。解決方案:最新版本中的PDFSieOpt pdfsieopt,最新版本中的pdfsizeopt_win32Exec目錄。
請按照https://github.com/pts/pdfsizeopt上的“安裝說明”進行安裝PDFSIZEOPT。通過這樣做,PDFSizeOpt將使用Ghostscript 9.05捆綁在一起,並且可以使用。