неправильное кодирование при обновлении метаданных pdf с использованием ghostscript и pdfmark - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть базовый файл PDF, и я хочу обновить заголовок на китайский (UTF-8), используя ghostscript и pdfmark, команду, подобную приведенной ниже

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=result.pdf base.pdf pdfmarks

И файл pdfmarks (кодировка UTF-8 без спецификации ) ниже

[ /Title (敏捷开发)
/Author (Larry Cai)
/Producer (xdvipdfmx (0.7.8))
/DOCINFO pdfmark

Команда успешно выполнена, а когда я проверяю свойства result.pdf

Название изменяется на æŁ‘æ“·å¼•å‘

Пожалуйста, дайте мне подсказки, как решить эту проблему, есть ли какие-либо параметры в команде gs или pdfmark?

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

В справочнике PDF указано, что запись заголовка в информационном словаре документа имеет тип «текстовая строка».Текстовые строки определяются как использование PDFDocEncoding или UTF-16BE с меткой порядка байтов (см. Стр. 158 Справочного руководства по 1.7 PDF).

Таким образом, вы не можете указать заголовок с помощью UTF-8 без спецификации.

Я бы предположил, что если вы замените строку заголовка строкой, определяющей содержимое с помощью UTF-16BE, на спецификацию, то она будет работать правильно.Я бы посоветовал вам использовать шестнадцатеричную строку вместо обычной строки PostScript для указания данных просто для простоты использования.

0 голосов
/ 15 ноября 2018

Используя идею Happyman Chiu, мое решение следующее.Получите строку UTF-16BE с спецификацией

echo -n '(敏捷开发)' | iconv -t utf-16 |od -x -A none | tr -d ' \n' | sed 's/./\U&/g;s/^/</;s/$/>/'

. Вы получите <FEFF0028654F63775F0053D10029>.Замени это на заголовок.

/Title <FEFF0028654F63775F0053D10029>
0 голосов
/ 25 июня 2013

follow pdfmark для метаданных docinfo в pdf не принимает акцентированные символы в ключевых словах или теме

Я использую эту функцию, чтобы создать строку из utf-8 для info.txt, чтобы бытьиспользуется командой gs.

  function str_in_pdf($str){
    $cmd = sprintf("echo '%s'| iconv -t utf-16 |od -x -A none",$str);
    exec($cmd,$out,$ret);
    return "<" . implode("",$out) .">";
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...