Укажите шрифт замещения по умолчанию при преобразовании pdf в изображение с помощью imagemagick, а шрифт отсутствует - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Spatie / pdfToImage , который основан на скрипте-привидении и imagemagick на моем сервере:

  1. Возьмите многостраничный pdf из электронной почты с помощью маршрутизации mailgun.
  2. Сохраните pdf в папке / docs_pdf как файл.pdf
  3. Используйте foreach для циклического просмотра каждой страницы и сохраняйте каждую страницу в виде png в / docs как файл _ #. Png

локально, где я использую laravel -> valet, все работает нормально.

На моем сервере, использующем цифровой океан через laravel forge, язык в многостраничном 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

По предложению KenS я выполнил

gs -sDEVICE = png16m -o out% 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

документ отображается так же = неправильно.

Я в полной растерянности .. Не знаю, каким может быть следующий шаг ..

Update2:

Я также запускаю команду конвертирования imagemagick и img отрисовываем так же.

Так что, даже если я делаю это с ghostscript solo, imagemagick или spatie / pdfToImage itдает мне тот же вывод

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Наконец получил его на работу.Сначала я хочу выразить благодарность KenS, которая действительно очень помогла мне, и без него это не сработало бы.

Вот что я сделал:

1 - я удалил ghostscript:

   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
0 голосов
/ 19 сентября 2018

Что ж, текущая версия Ghostscript (9.25) делает это приемлемым для меня;то есть текст кажется правильным.Все шрифты встроены, поэтому проблем с не должно быть * 1002.

И это означает, что даже если вы заменили замену шрифта по умолчанию, это не поможет, потому что Ghostscript не долженне будет использовать шрифт по умолчанию, он будет использовать шрифты, встроенные в файл PDF.

Не зная, какую версию Ghostscript вы используете (я вижу из более позднего комментария, что это 9.25), или командуСтрока, которая используется, чтобы начать это, я не могу сделать сравнение для сравнения.Мне трудно понять, как ты мог получить такой другой результат.Похоже, что Ghostscript не смог найти встроенные шрифты.

Возможно, что любой пакет, который вы используете, сделал что-то «неудачное».Различные сопровождающие пакетов в Linux добавляют свои собственные патчи и иногда изменяют способ сборки Ghostscript.Возможно, это что-то сломало.

Если вы можете собрать Ghostscript самостоятельно, вы можете попробовать клонировать наш Git-репозиторий и сделать это.Вы также можете попробовать загрузить бинарные файлы Linux с нашего сайта.Они не будут работать с каждым дистрибутивом Linux (с другим ABI), но вы можете попробовать, возможно, вам повезет.

Вы также можете попробовать запустить Ghostscript непосредственно в файле PDF.Примерно так:

gs -sDEVICE = png16m -o out% d.png

должен создать 2 файла PNG, out1.png и out2.png.Он также будет производить кучу вещей на терминале.Этот вывод по тыловому каналу является для меня ценной информацией, поэтому, если вы можете воспроизвести проблему, я бы тоже хотел это увидеть.

Последняя мысль;возможно, чтобы одновременно было установлено более одной версии Ghostscript, возможно, что ваша текущая установка использует старую версию Ghostscript.

Я не могу помочь вам с ImageMagick или Spatie, но если вы можете отладить ихдо такой степени, что вы можете воспроизвести проблему с помощью простой командной строки Ghostscript, тогда я смогу взглянуть на нее подробнее.

...