2016-03-01 93 views
0

使用Laravel的,我现在用https://github.com/clegginabox/pdf-merger合并的PDF文件,冲进下面的错误尝试两个PDF文件合并到一起,其中一个是在1.4版本时,一个Web应用程序使用的ghostscript:在PHP脚本

Exception in pdf_parser.php line 133: 

This document (C:\path-to-doc\file.pdf) probably uses a compression technique 
which is not supported by the free parser shipped with FPDI. 
(See https://www.setasign.com/fpdi-pdf-parser for more details) 

in pdf_parser.php line 133 

我在下面的答案中遵循了这个建议,使用ghostscript将1.4以上的任何pdf转换为1.4,这样合并就可以工作。

FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI

我已经成功地安装的ghostscript并将其添加到我的道路。为了测试我有一个样本pdf文件是1.5版叫做test.pdf,我从窗户终端中运行以下命令:

gswin64 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test-file.pdf

,我得到我的new-file.pdf就好了1.4版本。

现在我有以下的PHP脚本,当从网页浏览器运行,只是不断加载。如果我让它运行一下,有时会创建一个新文件,但它的大小和空白都是3kb,并且原始pdf文件有时也会变空白。

<?php 

shell_exec("gswin64 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test-file.pdf"); 

echo 'done'; 

任何想法我做错了什么?

+0

你是什么意思“添加到我的路径”?提前致谢。 – Marsha

+0

@Marsha看到我的回答 - 我用相关信息更新了它,让我知道它是否没有意义。 – haakym

+0

@Marsha如果你想在我的问题中使用这个软件包或者试图合并PDF文件,请告诉我,因为我现在已经有了更多的经验,并且可能会提供一些提示。 – haakym

回答

1

刚要发布这个问题,并找出它,所以继续为他人的利益回答。

我读了超级用户这个答案https://superuser.com/questions/200188/reading-a-pdf-file-for-testing-in-ghostscript#answer-200784

这部分是灯泡

如果您在Windows上使用Ghostscript的,你就会有两个可执行文件:

  1. gswin32c.exe
  2. gswin32.exe

第一个是从一个'DOS 框'(即cmd.exe窗口) - 交互式或不交互。它将 所有stderr/stdout消息打印到cmd.exe窗口中,并且还期望 可以在其中键入任何输入命令。

第二个打开一个单独的窗口,“互动“:打印 STDERR /标准输出到单独的窗口,预计命令有

所以我改变了我的PHP脚本使用gswin64c和输出的文本。从命令的响应:

$output = shell_exec("gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new-file.pdf test.pdf"); 

echo "<pre>$output</pre>"; 

这表明,我即test-file.pdf引用了错误的文件名称,而不是test.pdf

Error: /undefinedfilename in (test-file.pdf) 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 
Dictionary stack: 
    --dict:1192/1684(ro)(G)-- --dict:0/20(G)-- --dict:78/200(L)-- 
Current allocation mode is local 
Last OS error: No such file or directory 

更新文件名后,它一切正常!

更新

为应对这个问题玛莎的评论...

你所说的“将它添加到我的路”是什么意思?提前致谢。

当您添加一个可执行文件或位置的一组可执行文件到您的PATH环境变量,它允许可执行文件(S)从任何地点通过命令行调用。例如,你可以在将它添加到你的路径后调用C:\youruser\Desktop的ghostscript,而不是在你的ghostscript文件所在的文件夹中,或者其他任何东西。

有时您正在安装的软件会自动为您执行此操作,有时您需要自己手动执行此操作(如使用ghostscript)。

如何一个可执行文件添加到PATH环境变量:

  1. 我的电脑
  2. 属性
  3. 高级系统设置
  4. 环境变量
  5. 然后可执行文件追加到的结束用户变量/ PATH或系统变量/路径中的现有值 - 如果您使用用户变量,则它将仅适用于您的用户,如果您使用系统变量,它将应用于所有用户小号

提示:

  • 你可以跳到第3步,如果你按windows键+ pause
  • 必须在路径变量用分号;
单独的新条目

如果你谷歌的东西像“添加EXE到我的路径窗口”我相信你会发现这方面的很多信息。希望这有助于!