Чтение и проверка файлов PDF - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь сделать следующее: я хочу открыть существующий документ PDF и проверить ширину каждой страницы в нем.

$pdf = Zend_Pdf::Load( $fullFilePath );      
foreach($pdf->pages As $key => $page)
{
  $width  = $page->getWidth();
}

Но каждый раз получаю одинаковую ширину.Даже если есть «двойные страницы» (чтобы понять, что я имею в виду, см. http://www.reinkesupply.com/Acoustical%20Cross-Reference.pdf)

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

При проверке нескольких DOS я получаю следующую ошибку:

Message:

PDF file syntax error. Offset - 0x12E9048. Wrong W dictionary entry. Only type field of stream entries has default value and could be zero length.

Stack trace:

#0 C:\xampp\htdocs\qs\library\Zend\Pdf\Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('19828808')
#1 C:\xampp\htdocs\qs\library\Zend\Pdf.php(297): Zend_Pdf_Parser->__construct('C:\xampp\htdocs...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 C:\xampp\htdocs\qs\library\Zend\Pdf.php(250): Zend_Pdf->__construct('C:\xampp\htdocs...', NULL, true)
#3 C:\xampp\htdocs\qs\application\controllers\IndexController.php(18): Zend_Pdf::load('C:\xampp\htdocs...')
#4 C:\xampp\htdocs\qs\library\Zend\Controller\Action.php(503): IndexController->indexAction()
#5 C:\xampp\htdocs\qs\library\Zend\Controller\Dispatcher\Standard.php(285): Zend_Controller_Action->dispatch('indexAction')
#6 C:\xampp\htdocs\qs\library\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\xampp\htdocs\qs\public\index.php(24): Zend_Controller_Front->dispatch()
#8 {main}

Я полагаю, это из-за кроссссылка.Я прав?Есть ли простой способ исправить это?

Спасибо

1 Ответ

1 голос
/ 15 февраля 2012

Основная проблема заключается в том, что Zend_Pdf_Page использует атрибуты Media Box для вычисления ширины и высоты каждой страницы, а не (в данном конкретном случае) Box Crop. Для дальнейшего объяснения различных полей, смотрите эту ссылку: http://www.prepressure.com/pdf/basics/page_boxes

Одним из возможных решений в вашем случае было бы исправление Zend_Pdf_Page так, чтобы оно использовало значения поля кадрирования, когда они доступны, в противном случае возвращает значения поля мультимедиа. Код используется в методах getHeight() и getWidth(), которые начинаются примерно со строки 459 в ZF 1.1.11.

Однако я недостаточно опытен, чтобы сказать, является ли постоянное использование Crop Box хорошей идеей или нет. Возможно, кто-то еще может прокомментировать это? По вышеупомянутой ссылке у меня сложилось впечатление, что Trim Box может быть лучшим вариантом, но я не думаю, что образец PDF, на который вы ссылались, содержит эти данные.

Верите ли вы в правильность текущего поведения Zend_Pdf_Page или нет, зависит от определений. Хотите ли вы размер всего холста, т.е. лист бумаги, который вы позже можете физически обрезать (вы можете захотеть узнать это, чтобы добавить примечания к части страницы, не предназначенной для печати), или область просмотра, которую вы обычно ожидаете увидеть на экране ? Правильный ответ, вероятно, и то и другое: Zend_Pdf_Page, вероятно, требуется больше методов или, по крайней мере, параметр, добавленный к getWidth() и getHeight(), который позволяет вызывающей стороне точно указывать, какие измерения им интересны. Я быстро взглянул на трекер проблем ZF и ничего не смог найти по этому поводу, поэтому я добавлю тикет. По крайней мере, блок документации должен упомянуть, что он возвращает размер Media Box, и побудить пользователей понять, что это значит.

В конечном счете, на вашем месте я бы, вероятно, пошел и исправил Zend_Pdf_Page, чтобы при наличии Crop Box он возвращал этот размер, в противном случае он возвращает Media Box. И если вы хотите внести этот патч, ваше путешествие начинается здесь: http://framework.zend.com/wiki/display/ZFDEV/Contributing+to+Zend+Framework: -)

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