代码之家  ›  专栏  ›  技术社区  ›  Brainmaniac

使用imagemagick将pdf转换为图像时指定默认替换字体,但缺少字体

  •  1
  • Brainmaniac  · 技术社区  · 6 年前

    我正在使用 Spatie/pdfToImage 它基于ghost脚本和imagemagick在我的服务器上:

    1. 使用mailgun路由从电子邮件中获取多页pdf。
    2. 使用foreach循环浏览每个页面,并将每个页面保存为png to/docs,如file#.png

    在本地使用laravel->代客泊车一切正常。

    在我的服务器上,通过laravel使用digital ocean伪造了一个多页pdf格式的语言,它是用瑞典语从普通的瑞典语转换成一堆随机的字母和符号。

    enter image description here

    有人向我建议,这可能是服务器上缺少字体的问题。pdf中使用的字体:

    <</StemV 68/FontName/PSQHMO+FoundrySans-Normal/FontFile2 216 0 R/FontStretch/Normal/FontWeight 400/Flags 32/Descent -240/FontBBox[-40 -240 960 916]/Ascent 916/FontFamily(FoundrySans-Normal)/CapHeight 667/XHeight 465/Type/FontDescriptor/ItalicAngle 0>>
    <</StemV 100/FontName/MLHPWU+FoundrySans-Medium/FontFile2 217 0 R/FontStretch/Normal/FontWeight 400/Flags 32/Descent -241/FontBBox[-42 -241 1008 916]/Ascent 916/FontFamily(FoundrySans-Medium)/CapHeight 667/XHeight 470/Type/FontDescriptor/ItalicAngle 0>>
    <</StemV 68/FontName/SUEECI+FoundrySans-Normal/FontFile2 218 0 R/FontStretch/Normal/FontWeight 400/Flags 4/Descent -240/FontBBox[-40 -240 960 916]/Ascent 916/FontFamily(FoundrySans-Normal)/CapHeight 667/XHeight 465/Type/FontDescriptor/ItalicAngle 0>>
    <</StemV 48/FontName/KIDDUY+FoundrySans-Light/FontFile2 9 0 R/FontStretch/Normal/FontWeight 400/Flags 32/Descent -248/FontBBox[-28 -248 978 924]/Ascent 924/FontFamily(FoundrySans-Light)/CapHeight 667/XHeight 458/Type/FontDescriptor/ItalicAngle 0>>
    

    以下是imagemagick和ghostscript中的字体配置: https://www.imagemagick.org/script/resources.php

    这个问题怎么解决?

    我现在已经在新服务器上进行了全新的安装。

    安装Imagick和spatie/pdfToImage

    gs-sDEVICE=png16m-o输出%d.png

    终端输出

    forge@Server:~/app/storage/app/public/files$ gs -sDEVICE=png16m -o test_out%d.png file.pdf
    GPL Ghostscript 9.22 (2017-10-04)
    Copyright (C) 2017 Artifex Software, Inc.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Processing pages 1 through 2.
    Page 1
    Page 2
    

    文件呈现相同=错误。

    我完全不知所措。。不知道下一步会是什么。。

    更新2:

    我还运行了convert imagemagick commando,img也以同样的方式呈现。

    所以,即使我用ghostscript solo、imagemagick或spatie/pdfToImage来做,它也会给我相同的输出

    2 回复  |  直到 6 年前
        1
  •  1
  •   KenS    6 年前

    好吧,当前版本的鬼魂脚本(9.25)使我可以接受这一点;这是文本似乎是正确的。所有的字体都是嵌入的,所以 不应该 有什么问题吗。

    如果不知道您使用的是哪个版本的Ghostscript(我在后面的评论中看到它是9.25),或者是用来启动它的命令行,我真的无法进行类似的比较。我很难理解你怎么会得到如此不同的结果。看来Ghostscript找不到嵌入的字体。

    很可能你使用的任何软件包都做了“不幸”的事情。Linux上的各种软件包维护人员都添加了自己的补丁,有时还会修改Ghostscript的构建方式。可能是坏了什么东西。

    gs-sDEVICE=png16m-o输出%d.png

    我无法帮助您使用ImageMagick或Spatie,但是如果您可以调试它们,使您可以使用普通的Ghostscript命令行重现问题,那么我可以进一步研究它。

        2
  •  1
  •   Brainmaniac    6 年前

    终于成功了。我首先要赞扬肯斯,他真的帮助了我,没有他,这一切都不会成功。

    我就是这么做的:

    1-我删除了鬼魂脚本:

       sudo apt-get purge --auto-remove ghostscript
    

    然后

    wget
       https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs925/ghostscript-9.25.tar.gz
    

    tar xvf ghostscript-9.25.tar.gz

    ./configure
    
    make
    
    make install
    

    然后

    sudo ln -s /usr/local/bin/gs /usr/bin/gs
    

    除此之外,我还做了:

    sudo add-apt-repository ppa:glasen/freetype2
    

    sudo apt update && sudo apt install freetype2-demos