LinuxForum.Fans
Тема

Направьте на правильный путь

Автор: marikk 24 сообщений 3067 просмотров
#272934
text

#!/usr/bin/env python
#_*_coding: utf-8_*_
import sys, re
def Find(patt, text):
    match = re.findall(patt, text)
    if match:
        for block in match:
            if '/Type /Page\n' in block:
                print (block + '-----------------')
    else : print ('Не найдено...')

f = open(sys.argv[1], 'r') data = f.read() patt = re.compile(r'\sobj([\s\S]+?)endobj')

Find(patt, data)

[console]$ ./pdfparser.py test.pdf[/console]

Показать

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 16 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 19 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Annots 24 0 R
/Contents 26 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 29 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 32 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 35 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Annots 40 0 R
/Contents 42 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 45 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 48 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Annots 53 0 R
/Contents 54 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 57 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 60 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 63 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 66 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 69 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 72 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 75 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 78 0 R
>>

-----------------

<<
/Resources 3 0 R
/Type /Page
/MediaBox [0 0 595.275 841.889]
/CropBox [0 0 595.275 841.889]
/BleedBox [0 0 595.275 841.889]
/TrimBox [0 0 595.275 841.889]
/Parent 1 0 R
/Contents 81 0 R
>>

-----------------

Оно ?

#272939

Оно ?

так то оно да. Большое спасибо за старания.
В большинстве случаев такой парсинг будет уместен (если добавить пару условий), на первое время он будет взят за основу.
Но проблему непоследовательности страниц таким подходом не побороть. Наглядный пример:

text
1531 0 obj
<</Count 86/Type/Pages/Kids[1532 0 R 1533 0 R 1534 0 R 1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R]>>
endobj
1532 0 obj
<</Parent 1531 0 R/Count 10/Type/Pages/Kids[1545 0 R 1 0 R 3 0 R 11 0 R 13 0 R 190 0 R 339 0 R 510 0 R 597 0 R 602 0 R]>>
endobj
1533 0 obj
<</Parent 1531 0 R/Count 10/Type/Pages/Kids[604 0 R 616 0 R 623 0 R 629 0 R 665 0 R 678 0 R 689 0 R 702 0 R 710 0 R 723 0 R]>>
endobj

1532 0 obj -- 1 страница
604 0 obj -- 21 страница.
Такое будет встречаться редко, но все равно хотелось бы иметь возможность работать со всем, а иначе теряется смысл "проекта".

#272941
"marikk" написал:
Но проблему непоследовательности страниц таким подходом не побороть.

Брр.. Опять не понял... Я в этих PDFах не бум-бум. Попробуйте более широко описать задачу.

#272956
-=Serj=- написал:
[quote="marikk"]Но проблему непоследовательности страниц таким подходом не побороть.

Брр.. Опять не понял... Я в этих PDFах не бум-бум. Попробуйте более широко описать задачу.[/quote]
Все вы правильно сделали. Ошибся немного с переводом документации. Спасибо

Войдите или зарегистрируйтесь, чтобы ответить.