3

给定一个 PDF,如何使用 PHP lib 或 linux 命令行工具获得 PDF 的布局模式(或相对宽度/高度)?

使用http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf可以在新 PDF 上设置此变量,但对于 adobe 中的现有 pdf。

考虑将 pdf 转换为 ps,或以其他方式使用 gs - 比如先将其转换为图像,然后获取其宽度和高度。这是最好的方法吗?

4

3 回答 3

3

我正在使用的解决方案是使用 ghostscript 将第一页打印到图像上,然后获取图像尺寸

$cmd = 'gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 -sDEVICE=png16m -r400 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="'.$complete_file_path.'/p%d.png" "'.$complete_file_path.'/'.$this->pdffilename.'"';
        $result = $this->proc( $cmd );
        list($width, $height, $type, $attr) = getimagesize($complete_file_path.'/'.$pngfilename);
于 2009-09-24T17:05:43.143 回答
1

您不能总是依赖第一页的结果与其他所有页面的结果相同。我已经在野外看到了足够多的混合格式 PDF,不想将任何代码基于该假设。

确定每个页面(甚至每个嵌入式 {Trim,Media,Crop,Bleed}Boxes)的媒体大小的更可靠方法是命令行工具 pdfinfo.exe(来自http://www的 XPDF 工具的一部分.foolabs.com/xpdf/download.html)。您可以使用“-box”参数运行该工具,并使用“-f 3”告诉它从第 3 页开始,使用“-l 8”告诉它在第 8 页停止处理。

示例输出:

C:\downloads>pdfinfo -box -f 1 -l 3 _IXUS_850IS_ADVCUG_EN.pdf
创建者:FrameMaker 6.0
制作者:Acrobat Distiller 5.0.5 (Windows)
创建日期:08/17/06 16:43:06
修改日期:08/22/06 12:20:24
标签: 没有
页数:146
加密:否
第 1 页大小:419.535 x 297.644 点
第 2 页大小:297.646 x 419.524 点
第 3 页大小:297.646 x 419.524 点
第 1 页媒体框:0.00 0.00 595.00 842.00
第 1 页裁剪框:87.25 430.36 506.79 728.00
第 1 页出血盒:87.25 430.36 506.79 728.00
第 1 页修剪框:87.25 430.36 506.79 728.00
第 1 页艺术盒:87.25 430.36 506.79 728.00
第 2 页媒体框:0.00 0.00 595.00 842.00
第 2 页裁剪框:148.17 210.76 445.81 630.28
第 2 页出血框:148.17 210.76 445.81 630.28
第 2 页修剪框:148.17 210.76 445.81 630.28
第 2 页艺术盒:148.17 210.76 445.81 630.28
第 3 页媒体框:0.00 0.00 595.00 842.00
第 3 页裁剪框:148.17 210.76 445.81 630.28
第 3 页出血框:148.17 210.76 445.81 630.28
第 3 页修剪框:148.17 210.76 445.81 630.28
第 3 页艺术盒:148.17 210.76 445.81 630.28
文件大小:6888764 字节
优化:是
PDF版本:1.4
于 2010-06-05T18:14:20.037 回答
0

Big gun, but no other suggestions. I have used the iText Java library for processing pdf files.

Note that as far as I know there is no such thing as PDF layout mode, or size. The PDF is a collection of pages each of which has a media box defining the size of the page to be printed. However this property can be inherited by a page from previous pages if not defined. See PDF reference for details.

于 2009-09-23T18:06:10.900 回答