PHP组合两个PDF脚本将返回组合两次的第一页
我有一个php脚本,可以合并两个PDF文件。当我直接从服务器拉取这两个文件时,脚本工作得非常好。但关键是将这两个文件作为服务发布,并将这两个文件作为base 64编码文本发布,然后合并这些文件,让接收端下载合并后的PDF 当使用post变量时,我得到的结果好坏参半。我认为缓存或会话中有东西卡住了,但我不太熟悉如何正确地实现这一点 当结果不正确时,将首先合并两次。我开始检查PDF1=PDF2,并抛出一个错误,但在测试时它永远不会发生,除非我真的发布了相同的PDF。我在脚本中尝试了进一步的测试,但无法确定错误点 我还可以如何调试它?我还能试什么 以下是当前脚本:PHP组合两个PDF脚本将返回组合两次的第一页,php,session,pdf,post,tcpdf,Php,Session,Pdf,Post,Tcpdf,我有一个php脚本,可以合并两个PDF文件。当我直接从服务器拉取这两个文件时,脚本工作得非常好。但关键是将这两个文件作为服务发布,并将这两个文件作为base 64编码文本发布,然后合并这些文件,让接收端下载合并后的PDF 当使用post变量时,我得到的结果好坏参半。我认为缓存或会话中有东西卡住了,但我不太熟悉如何正确地实现这一点 当结果不正确时,将首先合并两次。我开始检查PDF1=PDF2,并抛出一个错误,但在测试时它永远不会发生,除非我真的发布了相同的PDF。我在脚本中尝试了进一步的测试,但无
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/PDFMerge/tcpdf/tcpdf.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/PDFMerge/tcpdf/tcpdi.php');
class MergePDF extends TCPDI
{
public $files = array();
public function setFiles($files)
{
$this->files = $files;
}
public function concat()//from set assign example
{
foreach($this->files AS $key=> $file) {
$pageCount = $this->setSourceData($file);//setSourceData used for raw data
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$tplIdx = $this->ImportPage($pageNo);
$s = $this->getTemplatesize($tplIdx);
$this->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
$this->useTemplate($tplIdx);
}
if($key>0){
if ($this->files[0] == $this->files[1]){
echo "Duplicate file error"; //I cannot get this to occur
die();
}
}
unset($file);
unset($pageCount);
}
}
}
//error_log("MergePDF Called");
$pdf641 = $_POST['pdf1'];
$pdf642 = $_POST['pdf2'];
$outputType = $_POST['output'];
if ($pdf641 == $pdf642)
{
echo "error: both files are the same";
error_log("MergePDF error: Both Files are The Same!");
session_unset();
die();
}
/*
if (hash("sha256",$pdf641,false) == hash("sha256", $pdf642,false))
{
echo "error: both files are the same";
error_log("MergePDF error: Both SHA256 Files are The Same!");
die();
}
*/
$p1d = base64_decode($pdf641);
$p2d = base64_decode($pdf642);
$pdf = new MergePDF();
$pdf->setFiles(array( $p1d, $p2d));
$pdf->concat();
$uuid = uniqid("pdf_",false);
if ($outputType == "download")
{
$pdf->Output($uuid . '.pdf', 'I'); /*//D I*/
}
else
{
$out = base64_encode($pdf->Output($uuid . '.pdf', 'S')); //output is 'S' for string
echo $out;
}
?>
不要吹毛求疵,但为什么要使用会话?它们在代码中似乎不是任何会话数据。此外,它们的缓存不会在代码中发生。您的输出看起来还需要一个标题标题('Content-type:application/pdf')代码>@danielson317我在会话中尝试了不同的方法,但没有任何方法可以解决问题。如果局部变量足够多,我可以去掉所有会话调用。是什么导致了我的问题?不确定是什么导致了你的问题。我确实觉得奇怪,你用$\u POST['pdf1']
而不是$\u文件['pdf1']
。PHP通常使用文件超级全局上传文件。也许这与此有关。@danielson317向服务发出请求的系统需要发布URL字符串中编码的PDF数据。我的结果是随机的,有时我得到正确的结果,有时我得到第一个PDF合并两次。