给定PDF,如何使用PHP lib或linux命令行工具获得PDF的布局模式(或相对宽度/高度)?
使用http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf可以在新PDF上设置此变量,但是对于来自adobe的现有pdf。
将pdfs转换为ps或以其他方式使用gs的想法 - 比如首先将其转换为图像,然后获取其宽度和高度。这是最好的方式吗?
答案 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。