我正在为现有的Web应用程序添加一项新功能,该功能将验证上传的PDF文件的大小,以确保其不低于A4。 Web应用程序使用PHP / Laravel构建。
我已经考虑过两种方法来解决这个问题:
对于Ghostscript,我发现this answer here on SO建议使用另一个名为pdf_info.ps
的脚本(我确实按照建议的评论下载了这个脚本)。但是,我无法让它正常工作。在将其添加到任何PHP脚本之前,我尝试运行以下命令:
λ .\gswin64c -dNODISPLAY -q -sFile=c:\test.pdf [-dDumpMediaSizes=false] [-dDumpFontsNeeded=false] [-dDumpXML] [-dDumpFontsUsed [-dShowEmbeddedFonts] ] ..\toolbin\pdf_info.ps
Error: /undefinedfilename in ([-dDumpMediaSizes=false])
Operand stack:
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push
Dictionary stack:
--dict:1196/1684(ro)(G)-- --dict:0/20(G)-- --dict:78/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 9.19: Unrecoverable error, exit code 1
我似乎收到错误的不同变体:"错误:/(undefinedfilename)in([-dDumpMediaSizes = false])"当我尝试不同的方法,如添加完整的文件路径。我在Windows上,所以我尝试添加像这样的完整文件路径" C:/ Program Files / gs / gs9.19 / toolbin / pdf_info.ps"并得到同样的错误。
使用FPDF / FDPI,我使用composer设置了一个小项目并拉入此包https://github.com/Setasign/FPDI-FPDF。我目前正在使用以下代码来读取现有文件:
<?php
use setasign\Fpdi;
// setup the autoload function
require_once('vendor/autoload.php');
// initiate FPDI
$pdf = new Fpdi\Fpdi();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile("test.pdf");
// import page 1
$tplId = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplId, 10, 10, 100);
// output page dimensions
echo $pdf->GetPageWidth();
echo '<br>';
echo $pdf->GetPageHeight();
我得到以下输出
210.00155555556
297.00008333333
所以我想问下列问题:
useTemplate()
方法将其添加到A4大小的页面?我欢迎任何替代方法的建议。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
返回导入页面的大小,例如通过FPDI的getTemplateSize()
方法:
$pdf = new FPDI('P','mm'); // change the snd parameter to change the units
$pdf->setSourceFile('test.pdf');
$pageId = $pdf->importPage(1);
$size = $pdf->getTemplateSize($pageId);
$ size将是一个包含以下键的数组:width,height,0(= width),1(= height)和orientation(L或P)。
答案 1 :(得分:1)
文档中的[
和]
字符旨在表明这是可选的。如果你想使用它们,那就这样做:
gswin64c -dNODISPLAY -q -sFile=c:\test.pdf -dDumpMediaSizes=false -dDumpFontsNeeded=false -dDumpXML -dDumpFontsUsed -dShowEmbeddedFonts ..\toolbin\pdf_info.ps
PDF文件的单位为1/72英寸。文件根本不需要A4。您还应该查看CropBox以及可能的ArtBox和BleedBox以及MediaBox值。
请注意,在这种情况下(我认为)输出将转到stdout,您可能希望将其重定向到文件。