Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > работа с pdf


Автор: burakov 24.5.2013, 22:53
Добрый день.

Задача:
удалить последнюю страничку из ПДФ.
написал скрипт. он работает.

Код

        my $import_pdf = PDF::API2 -> open ($file1);
        my $pdf = PDF::API2-> new ();
        my $page_count = $import_pdf->pages ();
        print '$page_count = '.$page_count ."\n";

        my $while_count = 1;
        while ($while_count < $page_count) {
            my $page = $pdf->importpage($import_pdf, $while_count, $while_count);
            print 'pdf_page_N = '. $while_count++ ."\n";
        }

        my $file2 = getcwd ().'/document_new.pdf'; 
        $pdf->saveas ($file2);
        
        $pdf = undef;
        $import_pdf = undef;


но на некоторых PDF запинается (вылетает, останавливает работу), выдавая ошибку.

Код

The PDF file uses a cross-reference stream, which is not yet supported (see Known Issues in the PDF::API2 documentation) at /usr/local/share/perl/5.10.1/PDF/API2/Basic/PDF/File.pm line 1136.


хотелось бы конечно, чтобы он везде обрезал., 
но как сделать хотя бы чтобы не вылетал.?
то есть сначала проверить совместим ли ПДФ с АПИ2 или нет.  


спасибо.



Автор: burakov 25.5.2013, 10:48
пробовал
PDF::Parse 

 $bool = $pdf->IsaPDF;
по идее он должен вернуть 0, если это не PDF (или не валидный).
но он отваливвается точно также как и PDF::API2
на моменте
$pdf->TargetFile($filename)


пишет
Can't read cross-reference section, according to trailer

мне нужно как то придумать, чтобы не валидные (или не те, с которыми модуль не может работать) файлы -- просто пропускало, а не останавливалось

Автор: burakov 27.5.2013, 01:03
для того, чтобы работало 

вспомнил про eval {}

выполняю теперь работу с объектом PDF

eval {
 ...создание объекта...
... работа с объектом...
}

в принципе работает.
то есть к примеру  если PDF не валидный модуль дает ошибку. но скрипт не умирает, и файл пропускается.
а если с PDF Все нормально, то и нормально все отрабатывает.

Автор: Bulat 5.7.2013, 20:44
Я как-то пробовал работать с PDF, уже не посню в чем была проблема, но на некоторых PDF-файлах скрипты тоже падали с ошибкой. В конечном счете использовал библиотеки Java(они все pdf-файлы нормально обрабатывали), обернув их в виде враппера, при помощи Inline::Java. Правда там малость пришлось пошаманить с кодировкой, но это было меньшее из зол. А вот напрямую через перл докопаться до истины так и не удалось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)