экранирование символов для замены в PDF - PullRequest
1 голос
/ 18 февраля 2009

Может кто-нибудь сказать мне набор управляющих символов для файла PDF и как их избежать? У меня есть (не дефлированный (надутый?)) Документ PDF, в котором я хотел бы редактировать текст, но я боюсь случайно создать некоторую последовательность управления, используя скобки и прочее.

Спасибо.

Ответы [ 2 ]

22 голосов
/ 18 февраля 2009

Хорошо, я думаю, что нашел это. На странице 15 спецификации PDF 1.7 (ссылка в формате PDF) кажется, что единственные символы, о которых мне нужно беспокоиться - это круглые скобки и обратный слеш.

Sequence | Meaning
---------------------------------------------
\n       | LINE FEED (0Ah) (LF)
\r       | CARRIAGE RETURN (0Dh) (CR) 
\t       | HORIZONTAL TAB (09h) (HT)
\b       | BACKSPACE (08h) (BS)
\f       | FORM FEED (FF)
\(       | LEFT PARENTHESIS (28h)
\)       | RIGHT PARENTHESIS (29h)
\\       | REVERSE SOLIDUS (5Ch) (Backslash)
\<i>ddd</i>     | Character code <i>ddd</i> (octal)

Надеюсь, это кому-то помогло.

1 голос
/ 18 февраля 2009

Вы, вероятно, уже знаете это, но PDF-файлы имеют индекс в конце, который содержит смещения байтов для всего документа. Если вы редактируете документ вручную, вы должны убедиться, что новый текст содержит столько же символов, сколько и оригинал.

Если вы хотите извлечь содержимое страницы PDF и отредактировать его, это довольно просто. Моя CAM :: PDF библиотека позволяет вам делать это программно или через командную строку:

 use CAM::PDF;
 my $pdf = CAM::PDF->new($filename);
 my $page_content = $pdf->getPageContent($pagenum);
 # ...
 $pdf->setPageContent($pagenum, $page_content)l
 $pdf->cleanoutput($out_filename);

или

 getpdfpage.pl in.pdf 1 > page1.txt
 setpdfpage.pl in.pdf page1.txt 1 out.pdf
...