【问题标题】:Get the layout mode (landscape or portrait) of a pdf from php/linux从 php/linux 获取 pdf 的布局模式(横向或纵向)
【发布时间】:2010-11-30 20:23:47
【问题描述】:

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

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

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

【问题讨论】:

标签: php linux pdf ghostscript cups


【解决方案1】:

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

一种更可靠的方法来确定每个页面(甚至每个嵌入的 {Trim,Media,Crop,Bleed}Boxes)的媒体大小是命令行工具 pdfinfo.exe(来自@987654321 的 XPDF 工具的一部分@)。您可以使用“-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

【讨论】:

    【解决方案2】:

    我使用的解决方案是使用 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 包含混合大小和混合方向的页面的所有情况。 (相信我,野外有很多这样的......)
    【解决方案3】:

    大枪,但没有其他建议。我使用了iText Java 库来处理 pdf 文件。

    请注意,据我所知,没有 PDF 布局模式或大小之类的东西。 PDF 是页面的集合,每个页面都有一个媒体框,用于定义要打印的页面的大小。但是,如果未定义,则此属性可以由先前页面的页面继承。详情请见PDF reference

    【讨论】:

    • iText java 库看起来相当于 tcpdf。感谢您提供有关 PDF 的提示
    • 您的“PDF 参考”链接已损坏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2014-11-09
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多