Что обозначают символы ASCII, предшествующие возврату каретки, на странице PDF? - PullRequest
0 голосов
/ 23 декабря 2018

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

Я хочу получить необработанные данные в PDFфайл, и мне удалось декодировать страницу с помощью библиотеки Python PyPDF2 с помощью следующих команд:

import PyPDF2
with open('My PDF.pdf', 'rb') as infile:
    mypdf = PyPDF2.PdfFileReader(infile)
    raw_data = mypdf.getPage(1).getContents().getData()
    print(raw_data)

Глядя на предоставленные необработанные данные, я начал подозреватьчто символы ASCII, предшествующие возврату каретки, значимы: каждый возврат каретки, который я видел, предшествует единице.Кажется, они могут быть каким-то идентификатором токена.Я уже понял, что /RelativeColorimetric связан с последовательностью ri\r.В настоящее время я просматриваю стандарт PDF 1.7, который Adobe предоставляет , и я знаю, где-то есть объяснение, но я пока не смог найти его на этой странице 756Бегемот документа

1 Ответ

0 голосов
/ 23 декабря 2018

Определяющим здесь является не то, что \r - он просто вставляется вместо обычного пробела для удобства чтения, а тот факт, что ri является оператором .

AПоток содержимого PDF использует синтаксис польской нотации на основе стека: value<sub>1</sub> value<sub>2</sub> ... value<sub><em>n</em></sub> operator

Полный синтаксис вашего ri, например, объясняется в таблице 57 на стр.127:

намерение ri (PDF 1.1) Установка цели цветопередачи в графическом состоянии (см. 8.6.5.8, «Рендеринг содержимого»).

, и идея заключается в том, что это действительно появляется в таком порядке внутри потока контента.(... Я попытался найти подходящий пример вашего ri в использовании, но не могу найти его; даже в самом файле ISO PDF, на который вы ссылались.)

Случайный фрагмент кода из другого источника:

q
  /CS0 cs
  1 1 1 scn
  1.5 i
  /GS1 gs
  0 -85.0500031 -14.7640076 0 287.0200043 344.026001 cm
  BX
  /Sh0 sh
  EX
Q

(отступ предоставлен моим собственным устройством чтения PDF) показывает операндов (/CS0, 1 1 1, 1.5 и т. Д.) С операторами (cs, scn, i и т. Д.) В конце каждой строки для ясности.

Это объясняется в 7.8.2 Потоки контента :

...
Поток контента после декодирования с использованием любых указанных фильтров должен интерпретироваться в соответствии с правилами синтаксиса PDF, описанными в п. 7.2 «Лексические соглашения».Он состоит из объектов PDF, обозначающих операнды и операторы. Операнды, необходимые оператору, должны предшествовать ему в потоке. См. ПРИМЕР 4 в 7.4, «Фильтры», для примера потока содержимого.
(мой акцент)

7.2.2 Набор символов указывает, что внутри потока контента такие символы пробела, как табуляция, новая строка и возврат каретки, являются только разделителями и могут встречаться в любом месте и в любом числе (> =1) между операндами и операторами.В нем упоминается

ПРИМЕЧАНИЕ. В примерах этого стандарта используется соглашение, согласно которому токены располагаются в строки.Однако примеры использования пробелов для отступов приведены исключительно для ясности изложения и не должны быть включены в практическое использование.

- к которому я могу добавить, что большинство PDFсоздание программного обеспечения действительно пытается разграничить «строки», состоящие из последовательности операндов-операторов с возвратами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...