首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取和检查PDF文件

读取和检查PDF文件
EN

Stack Overflow用户
提问于 2012-02-15 07:58:05
回答 1查看 1.7K关注 0票数 2

我正在尝试以下操作:我想打开一个现有的PDF文档,检查其中每一页的宽度。

代码语言:javascript
复制
$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时,我得到了以下错误:

代码语言:javascript
复制
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}

我想这是因为交叉引用。我说的对吗?有什么简单的方法可以解决这个问题吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-15 11:15:15

基本问题是Zend_Pdf_Page使用Media Box属性来计算每个页面的宽度和高度,而不是(在本例中)裁剪框。有关各个框的详细说明,请参阅此链接:http://www.prepressure.com/pdf/basics/page_boxes

在您的情况下,一种可能的解决方案是为Zend_Pdf_Page打补丁,以便它在可用时使用裁剪箱值,否则它将返回媒体箱值。代码在getHeight()getWidth()方法中,这两个方法从ZF 1.1.11中的第459行开始。

然而,我没有足够的经验来说永久使用Crop Box是不是一个好主意。也许其他人可以对此发表评论?我从前面提到的链接中得到的印象是Trim Box可能是一个更好的选择,但我不认为您提到的示例PDF包含该数据。

您是否相信Zend_Pdf_Page的当前行为是正确的,实际上取决于定义。你想要整个画布的大小吗?您以后可能会实际裁剪的一张纸(您可能想知道这一点,以便您可以向页面中不打算打印的部分添加注释),或者是您通常期望在屏幕上看到的可视区域?正确的答案可能是两者兼而有之:Zend_Pdf_Page可能需要更多的方法,或者至少需要向getWidth()getHeight()添加一个参数,以允许调用者准确地指定他们感兴趣的维度。我快速查看了ZF问题跟踪器,但找不到任何有关此问题的信息,因此我将添加一个工单。至少,文档块应该提到它返回Media Box的大小,并鼓励用户理解这是什么意思。

最终,如果我是你,我可能会进去修补Zend_Pdf_Page,这样当裁剪框可用时,它就会返回那个大小,否则它就会返回媒体框。如果你想贡献这个补丁,你的旅程从这里开始:http://framework.zend.com/wiki/display/ZFDEV/Contributing+to+Zend+Framework :-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9286035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档