给定一个 PDF,如何使用 PHP lib 或 linux 命令行工具获得 PDF 的布局模式(或相对宽度/高度)?
使用http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf可以在新 PDF 上设置此变量,但对于 adobe 中的现有 pdf。
考虑将 pdf 转换为 ps,或以其他方式使用 gs - 比如先将其转换为图像,然后获取其宽度和高度。这是最好的方法吗?
给定一个 PDF,如何使用 PHP lib 或 linux 命令行工具获得 PDF 的布局模式(或相对宽度/高度)?
使用http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf可以在新 PDF 上设置此变量,但对于 adobe 中的现有 pdf。
考虑将 pdf 转换为 ps,或以其他方式使用 gs - 比如先将其转换为图像,然后获取其宽度和高度。这是最好的方法吗?
我正在使用的解决方案是使用 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);
您不能总是依赖第一页的结果与其他所有页面的结果相同。我已经在野外看到了足够多的混合格式 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
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.