解決
system("gs -dSAFER -dBATCH -dNOPAUSE -sPAPERSIZE=letter -sDEVICE=pdfwrite \
-sOutputFile='cool.pdf' 'cool.ps'")
-dSAFER
(読み取り専用) 入力ファイルが変更されないようにします。
-dBATCH
Ghostscript を自動的に終了します。
-dNOPAUSE
各ページ変換後に自動的に続行されます。
の代わりにコマンドを使用することもできますがps2pdf
(こちらの方が優れているようです) gs
、上記は問題なく機能したので、他にもっと重要な作業があり、本番環境に簡単に展開してテストすることができないため、そのままにしておきました。
このソリューションにたどり着いた経緯
まず、PostScript (PS) ファイルを PDF に変換するために使用ghostscript
できることを知りました。
そのため、Ghostscript を使用してみましたが、同じ結果が得られました。(後から考えると、これは ImageMagic が PS および PDF フォーマットを Ghostscript に委譲しているためであることがわかりました。)
本番サーバーで生成された PDF をさらに調べたところ、実際には、本番サーバーで生成された PDF のページ サイズ (私のローカル マシンで生成された PDF のページ サイズよりも大きい) がわずかに大きいことに気付きました (後から考えると、 a4.) したがって、マージンが追加されます (笑)。:)
実動サーバーが異なるページ・サイズを使用しているのはなぜでしょうか? ...
あはは!運用サーバー上の Ghostscript 構成ファイル (実際には、その後すぐにGhostscript 初期化ファイルと呼ばれることを知りました) は、別のデフォルトのGhostscript ページ サイズを指定する必要があります。
よし、(実稼働サーバーに Ghostscript をインストールするときに) デフォルトの用紙サイズを a4 に上書きすることを決定した nincompoop は誰?
幸い、私は本番アクセス権を持っていないので、で明示的に設定できまし-sPAPERSIZE=legal
たが、調査は完了していません...
ローカル マシンで a を実行し、man gs
入力して「init」を検索し/init
、Enter を押しました。次に、n
&N
を使用して結果を循環します。を見たgs_init.ps
ので、やめて次のことをq
行いました。
sudo find / -name gs_init.ps
私は得た:
/opt/local/share/ghostscript/8.71/Resource/Init/gs_init.ps
/opt/local/var/macports/software/ghostscript/8.71_3/opt/local/share/ghostscript/8.71/Resource/Init/gs_init.ps
私cat
は 2 番目の結果をテストしました (MacPorts で ImageMagick をインストールしたことを思い出したので、もう一度やり直さなければならない場合は、ImageMagick をソースからインストールするか、代わりに HomeBrew でインストールするでしょう)。私は検索しPAPERSIZE
て見つけました:
% Optionally choose a default paper size other than U.S. letter.
% The default page size for many devices is set at compile time to
% letter, but this can be changed to A4 although this is rarely done.
% Some devices such as bbox have a different default page size,
% and should not be set to A4 or letter.
% When ghostscript is used in countries that use the international
% standard page size A4 rather than US letter, the page size of
% devices that default to letter or A4 can be changed by setting
% DEFAULTPAPERSIZE.
% /DEFAULTPAPERSIZE (a4) def