Есть ли поле, в котором файлы PDF указывают свою кодировку?

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

Мой вопрос: есть ли в файле PDF поле, где по соглашению указана схема кодирования (например, UTF-8)? Это будет что-то примерно аналогичное в HTML.

Заранее большое спасибо, Blz


Беглый взгляд на спецификацию PDF, кажется, подсказывает, что вы можете иметь другую кодировку внутри PDF -файл. Взгляните на страницу 86. Таким образом, PDF-библиотека с каким-либо низкоуровневым доступом должна быть в состоянии предоставить вам кодировку, используемую для строки. Но если вам нужен просто текст и вас не интересуют используемые внутренние кодировки, я бы предложил позволить библиотеке позаботиться о преобразованиях за вас.


PDF использует «именованные» символы в том смысле, что символ — это имя, а не числовой код. Символ «a» имеет имя «a», символ «2» имеет имя «два», а знак евро имеет имя «евро», чтобы привести несколько примеров. PDF определяет несколько «стандартных» «базовых» кодировок (названные «WinAnsiEncoding», «MacRomanEncoding» и некоторые другие, не могу точно вспомнить), кодировка является взаимно однозначным соответствием между именами символов и значениями байтов (да , только от 0 до 255). Точные нормативные значения для этих предопределенных кодировок указаны в спецификации PDF. Во всех этих кодировках используются значения ASCII для символов US-ASCII, но они отличаются более высокими значениями байтов.

Файл PDF может определять новые кодировки, принимая «базовую» кодировку (например, WinAnsiEncoding) и переопределение нескольких байтов, чтобы автор PDF-файла мог, например, определить новую кодировку с именем «MySuperbEncoding» как WinAnsiEncoding, но с измененным значением байта 65 на символ «ntilde» (это определение находится внутри файла PDF), а затем указать что некоторые строки в файле используют кодировку MySuperbEncoding. В этом случае строка, содержащая байтовые значения 65-66-67, будет означать символы «–BC», а не «ABC». И обратите внимание, что я имею в виду символы, не имеющие ничего общего с глифами или шрифтами. Различные строки в файле PDF могут использовать разные кодировки (это дает возможность использовать в файле PDF больше tan 256 символов, даже если каждая строка определена как последовательность байтов, и один байт всегда соответствует одному символу).

Итак, ответ на ваш вопрос таков: символы в файле PDF вполне могут быть закодированы внутри в специальной кодировке, сделанной на месте для этого конкретного файла PDF. При необходимости парсеры PDF должны производить соответствующие замены. Я не знаю PDFMiner, но меня удивляет, что он (будучи парсером PDF) дает неправильные значения, поскольку в спецификации очень четко указано, как это следует интерпретировать.. Можно получить всю необходимую информацию из файла PDF, но, как сказал Маттиас, это может быть большой проект, и я думаю, что программа под названием PDFMiner должна выполнять именно такую ​​работу.


PDF использует «именованные» символы в том смысле, что символ является именем, а не числовым кодом. Символ «a» имеет имя «a», символ «2» имеет имя «два», а знак евро имеет имя «евро», чтобы привести несколько примеров. PDF определяет несколько «стандартных» «базовых» кодировок (названные «WinAnsiEncoding», «MacRomanEncoding» и некоторые другие, не могу точно вспомнить), кодировка является взаимно однозначным соответствием между именами символов и значениями байтов (да , только от 0 до 255). Точные нормативные значения для этих предопределенных кодировок указаны в спецификации PDF. Во всех этих кодировках используются значения ASCII для символов US-ASCII, но они отличаются более высокими значениями байтов.

Файл PDF может определять новые кодировки, принимая «базовую» кодировку (например, WinAnsiEncoding) и переопределение нескольких байтов, чтобы автор PDF-файла мог, например, определить новую кодировку с именем «MySuperbEncoding» как WinAnsiEncoding, но с измененным значением байта 65 на символ «ntilde» (это определение находится внутри файла PDF), а затем указать что некоторые строки в файле используют кодировку MySuperbEncoding. В этом случае строка, содержащая байтовые значения 65-66-67, будет означать символы «–BC», а не «ABC». И обратите внимание, что я имею в виду символы, не имеющие ничего общего с глифами или шрифтами. Различные строки в файле PDF могут использовать разные кодировки (это дает возможность использовать в файле PDF больше tan 256 символов, даже если каждая строка определена как последовательность байтов, и один байт всегда соответствует одному символу).

Итак, ответ на ваш вопрос таков: символы в файле PDF вполне могут быть закодированы внутри в специальной кодировке, сделанной на месте для этого конкретного файла PDF. При необходимости парсеры PDF должны производить соответствующие замены. Я не знаю PDFMiner, но меня удивляет, что он (будучи парсером PDF) дает неверные значения, поскольку в спецификации очень четко указано, как это следует интерпретировать. Можно получить всю необходимую информацию из файла PDF, но, как сказал Маттиас, это может быть большой проект, и я думаю, что программа под названием PDFMiner должна выполнять именно такую ​​работу.

Оцените статью
techsly.ru
Добавить комментарий