从php / linux获取pdf的布局模式(横向或纵向)

时间:2009-09-23 17:31:35

标签: php linux pdf ghostscript cups

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

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

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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

示例输出:

C:\downloads>pdfinfo -box -f 1 -l 3 _IXUS_850IS_ADVCUG_EN.pdf
Creator:        FrameMaker 6.0
Producer:       Acrobat Distiller 5.0.5 (Windows)
CreationDate:   08/17/06 16:43:06
ModDate:        08/22/06 12:20:24
Tagged:         no
Pages:          146
Encrypted:      no
Page    1 size: 419.535 x 297.644 pts
Page    2 size: 297.646 x 419.524 pts
Page    3 size: 297.646 x 419.524 pts
Page    1 MediaBox:     0.00     0.00   595.00   842.00
Page    1 CropBox:     87.25   430.36   506.79   728.00
Page    1 BleedBox:    87.25   430.36   506.79   728.00
Page    1 TrimBox:     87.25   430.36   506.79   728.00
Page    1 ArtBox:      87.25   430.36   506.79   728.00
Page    2 MediaBox:     0.00     0.00   595.00   842.00
Page    2 CropBox:    148.17   210.76   445.81   630.28
Page    2 BleedBox:   148.17   210.76   445.81   630.28
Page    2 TrimBox:    148.17   210.76   445.81   630.28
Page    2 ArtBox:     148.17   210.76   445.81   630.28
Page    3 MediaBox:     0.00     0.00   595.00   842.00
Page    3 CropBox:    148.17   210.76   445.81   630.28
Page    3 BleedBox:   148.17   210.76   445.81   630.28
Page    3 TrimBox:    148.17   210.76   445.81   630.28
Page    3 ArtBox:     148.17   210.76   445.81   630.28
File size:      6888764 bytes
Optimized:      yes
PDF version:    1.4

答案 2 :(得分:0)

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

请注意,据我所知,没有PDF布局模式或大小。 PDF是一组页面,每个页面都有一个媒体框,用于定义要打印的页面大小。但是,如果未定义此属性,则可以通过以前页面中的页面继承此属性。有关详细信息,请参阅PDF reference