【问题标题】:RMagick convert ps to pdfRMagick 将 ps 转换为 pdf
【发布时间】:2010-08-25 17:37:18
【问题描述】:

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

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

更新:我解决了这个问题!请参阅下面的答案。

【问题讨论】:

    标签: pdf imagemagick ghostscript postscript


    【解决方案1】:

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

    Magick::ImageList::new('cool.ps').write('cool.png')
    

    【讨论】:

    • 好主意。我会试试这个并报告。
    • 感谢您的想法和鼓励。这让我坚持下去并找到解决方案。见my answer。我不能简单地转换为 PNG,因为我想要一个多页文档。
    【解决方案2】:

    解决方案

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

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

    我是怎么想到这个解决方案的

    首先,我发现我可以use ghostscript to convert PostScript (PS) files to PDF

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

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

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

    啊哈!生产服务器上的 Ghostscript 配置文件(实际上,我很快就知道它们被称为 Ghostscript initialization files。)必须指定不同的默认 Ghostscript page size

    好的,谁是决定(在生产服务器上安装 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
    

    catted 第二个结果(因为我记得使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多