0

当我将 PS 文件转换为 PDF 时,它在本地计算机上运行良好,但在生产服务器上,它会为页面添加边距,就好像我从 Mac OSX 预览打印设置中选择了 Scale to Fit 而不是 Scale: 100% . 我该如何防止这种情况?目前,我正在做:

Magick::ImageList::new('cool.ps').write('cool.pdf') # only works on local machine

更新:我解决了这个问题!请看下面我的回答。

4

2 回答 2

1

我不能肯定地说,但是您可以通过尝试另一种图像格式来确定是从 ps转换还是转换为 pdf是问题所在。Png 不会有额外的边框,所以如果它在这个例子中得到它们,你知道从 ps 转换是问题所在。

Magick::ImageList::new('cool.ps').write('cool.png')
于 2011-02-19T23:34:26.193 回答
1

解决方案

system("gs -dSAFER -dBATCH -dNOPAUSE -sPAPERSIZE=letter -sDEVICE=pdfwrite \
        -sOutputFile='cool.pdf' 'cool.ps'")
  • -dSAFER(只读)防止输入文件被更改。
  • -dBATCH自动退出 Ghostscript。
  • -dNOPAUSE每次页面转换后自动继续。

我意识到您也可以使用命令ps2pdf(看起来更好)而不是gs,但上面的工作正常,所以我保留了它,因为我还有其他更重要的事情要做,而且我无法轻松部署到生产环境并进行测试。

我是如何想到这个解决方案的

首先,我发现我可以用来ghostscript将 PostScript (PS) 文件转换为 PDF

所以,我尝试使用 Ghostscript 但得到了相同的结果。(事后看来,我了解到这是因为 ImageMagic 无论如何都将 PS 和 PDF 格式委托给 Ghostscript。)

在进一步检查生产服务器生成的 PDF 后,我意识到实际上生产服务器生成的 PDF 的页面大小(与我本地机器生成的 PDF 相比)略大(事后看来,我认为是a4.),因此,导致添加边距,哈哈。:)

我心想,为什么生产服务器使用不同的页面大小?...

啊哈!生产服务器上的 Ghostscript 配置文件(实际上,我很快就知道它们被称为Ghostscript 初始化文件。)必须指定不同的默认Ghostscript 页面大小

好吧,谁是决定(在生产服务器上安装 Ghostscript 时)将默认纸张尺寸覆盖为 a4 的 nincompoop?

幸运的是,由于我没有生产访问权限,我可以使用 明确设置它-sPAPERSIZE=legal,但我还没有完成调查......

在我的本地机器上,我做了一个然后通过键入然后输入man gs搜索“init” 。/init然后,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测试了第二个结果(因为我记得用 MacPorts 安装了 ImageMagick,尽管如果我不得不再做一次,我可能会从源代码或 HomeBrew 安装 ImageMagick)。我搜索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
于 2011-03-03T22:00:30.240 回答