У меня возникла странная и непоследовательная проблема с PhantomJs. Я застрял на этом со вчерашнего дня, и я больше не могу думать! я искал, написал код, но, по существу не удалось до поры до времени ...phantomjs несовместим в зависимости от того, как это называется
Немного контекста:
- Приложение я работаю над (с Laravel 4) необходимо сгенерировать PDF отчеты. Эти отчеты преобразуются с помощью phantomJS. До сих пор все работало по назначению.
- Мне было предложено добавить новую языковую поддержку для этого приложения: упрощенный китайский. Все в браузере.
- Тем не менее, PhantomJS не может создавать PDF-файл с поддержкой Китая.
Как генерируются отчеты:
- Генерация PDF инициируется (Laravel) метод контроллера.
- Полное (Laravel) представление сохраняется как временный HTML-файл (т. Е. PhantomJs в основном будет печатать в PDF локальном файле в этом случае).
- PHP помогает мне генерировать командную строку PhantomJS и выполняет ее.
- Ответ контроллера (Laravel) получает PDF-файл и загружает его.
В чем проблема?
Текст в сгенерированных отчетах пуст, если используется упрощенный китайский. Но это влияет только на китайские символы, а не на цифры. Here is a PDF sample of what I'm trying to describe.
Я мог проверить, что отчеты для других доступных языков хорошо работают (английский, французский, немецкий).
Что делает это непоследовательным?
При попытке отладить это, я сбросил командную строку, сгенерированную PHP, и попробовал ее из моей подсказки SSH; и это сработало! Все персонажи были напечатаны, на китайском языке. Как образец концепции, я попытался «распечатать в PDF» внешние страницы через CLI, как случайные страницы википедии на упрощенном китайском языке, и все хорошо сработало.
Кроме того, при проверке файла PDF я вижу, что шрифт (ы), встроенный в ошибочные отчеты, является значением по умолчанию сервера (семейство Nimbus Sans), которое не поддерживает упрощенный китайский язык. Однако в «хороших» отчетах используются шрифты, поддерживающие упрощенный китайский (SimSun, который я установил в своем доме - ~/.fonts/
- и добавлен в кэш fontconfig
с fc-cache -vf
).
То, что я пытался
- Установка CJK шрифтов (см выше) на сервере (SimSun, arphic-елях, Источник Han Sans, ...);
- оригинальный PHP-код использовал пакет Symfony Process, я также попытался закодировать 10-лайнеры с
exec
/shell_exec
; - Использование
@font-face
(в HTML-файл, то во внешнем файле CSS) с локальными файлами шрифтов - ... Поиск Повсеместно PhantomJS отслеживания проблем и список рассылки, Google ...
Я мог бы пропустили некоторые эксперименты, не стесняйтесь, чтобы я задумался! Я думаю, что нет готового решения, но я надеюсь, что смогу собрать хотя бы некоторые новые идеи по этому вопросу.
Edit: Что командная строка выглядит следующим образом:
Как написано выше, PHP генерирует команду PhantomJS строки и выполняет его; он всегда использует абсолютные пути. Когда я тестирую преобразование PDF из приглашения SSH, он всегда основывается на результатах PHP.
/home/lucio/my/app/path/Printer/PhantomJs/bin/phantomjs --ignore-ssl-errors=true --load-images=true --local-to-remote-url-access=true --web-security=false --ssl-protocol=tlsv1 --output-encoding=utf8 /home/lucio/my/app/path/Printer/PhantomJs/bin/generate-pdf.js /home/lucio/my/app/path/storage/tmp/1426973396.html /home/lucio/my/app/path/storage/tmp/1426973396.pdf
Как [phantomjs отсутствует скриншот шрифта, коробки оказываемых вместо] (http://stackoverflow.com/questions/15029002/phantomjs-screenshot-font-missing- box-rendered-вместо) или [Phantomjs отображает черные ящики на сайтах Azure] (http://stackoverflow.com/questions/22965791/phantomjs-renders-black-boxes-on-azure-websites)? –
Спасибо за ссылки. Я уже прочитал их, пытаясь исправить мою проблему, и это не помогло. В конце концов, китайского текста просто нет ... – lucio