2014-01-16 7 views
5

Я пытаюсь разработать скрипт python для блендера для вывода обработанной последовательности изображений в PDF. Я использую Imagemagick для преобразования в PDF, эта часть работает нормально. Однако я хочу, чтобы предварительный просмотр миниатюр также включался в PDF.Редактирование атрибутов PDF с использованием sed

Формат PDF немного сбивает с толку, но я нашел теги /PageMode и /UseThumbs и как их правильно вставить в файл. Я могу сделать это вручную, и он работает очень хорошо. Но я пытаюсь получить аналогичный результат без необходимости делать это вручную, я пишу сценарий в конце концов. Вот пример фрагмента данных заголовка в формате PDF, с добавленными тегами:

%PDF-1.3 
1 0 obj 
<< 
/Pages 2 0 R 
/PageMode 
/UseThumbs 
/Type /Catalog 
>> 
endobj 
2 0 obj 
<< 
/Type /Pages 
/Kids [ 3 0 R 17 0 R 31 0 R ] 
/Count 3 
>> 

Я пытаюсь использовать СЭД, чтобы вставить теги по мере необходимости на 4-й и 5-й линии, который также работает, но когда я открываю PDF, изображения повреждаются. загадочно, когда я сравниваю отредактированный вручную PDF (который не поврежден) в sed, отредактированном PDF (который поврежден) в блокноте ++, нет никакой разницы в файлах, которые я могу найти. Существует другой счетчик символов, но я не могу найти местоположение разницы

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

Что я делаю неправильно?

+0

Можете ли вы разместить два файла где-нибудь, чтобы мы могли взглянуть на оба? – janos

+6

Это говорит о наличии проблемы с CR/LF, если счетчик байтов выключен, но вы не можете визуально подтвердить разницу. Образец PDF действительно поможет. – usr2564301

+2

* Выполнение этого вручную не испортило ничего * - некоторые читатели в формате PDF, а именно Adobe Reader, имеют тенденцию игнорировать определенные типы повреждений, которые, как они знают, обрабатывают, и только жалуются, если файл PDF поврежден так, как они не может справиться. Скорее всего, поэтому ваше ручное изменение повредило файл просто * по-разному *. Если предположение @ Jongware о том, что разница в разделителях строк, истинно (возможно, sed читает файл * строка за строкой *, а при записи всегда использует свою предпочтительную строку), помните, что изменение разделителей строк в сжатом потоке действительно делает сломать это. – mkl

ответ

2

Вы действительно не хотите делать это от sed. Некоторые PDF-файлы могут выглядеть как текстовые текстовые файлы, но они, безусловно, не являются.

Поскольку вы уже используете Python, вы можете использовать библиотеку Python для этой задачи.

pdfrw будет делать это отлично для вас с чистого Python. Он будет работать в PDF-файле и перестроить его с любыми изменениями, которые вы хотите, и правильно установить смещения файлов. Следующий фрагмент кода необходимо установить/PageMode к/UseThumbs в/Root словаря PDF:

 
    from pdfrw import PdfReader, PdfWriter, PdfName 

    trailer = PdfReader('myfile.pdf') 
    trailer.Root.PageMode = PdfName.UseThumbs 
    PdfWriter().write('mynewfile.pdf', trailer) 

Отказ от ответственности: Я pdfrw автор.

+0

Хотел бы я увидеть это вчера. – saulspatz

Смежные вопросы