我是PHP的新手,在插入多个页面时使用FPDI有点困难。
我有一个.pdf文件,包含3页。 我最终将第1页保存为3中的单独页面并且与我的代码一起使用,但这是因为我的代码仅适用于1页。当我将其更改回3页文件时,它会给我一个内部服务器错误。
这是我正在使用的代码:
<?php
require_once('prog/fpdf.php');
require_once('prog/fpdi.php');
// initiate FPDI
$pdf = new FPDI();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile("apps/Par.pdf");
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplIdx, null, null, 0, 0, true);
// font and color selection
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(200, 0, 0);
// now write some text above the imported page
$pdf->SetXY(40, 83);
$pdf->Write(2, 'THIS IS JUST A TEST');
$pdf->Output();
我不确定如何将此代码转换为能够查看所有3个页面。 请帮助我谁谁可以。
答案 0 :(得分:16)
setSourceFile()方法将返回您设置的文档的页数。 只需遍历此页面并逐页导入即可。所有页面的示例都如下所示:
<?php
require_once('prog/fpdf.php');
require_once('prog/fpdi.php');
// initiate FPDI
$pdf = new FPDI();
// set the source file
$pageCount = $pdf->setSourceFile("apps/Par.pdf");
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$tplIdx = $pdf->importPage($pageNo);
// add a page
$pdf->AddPage();
$pdf->useTemplate($tplIdx, null, null, 0, 0, true);
// font and color selection
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(200, 0, 0);
// now write some text above the imported page
$pdf->SetXY(40, 83);
$pdf->Write(2, 'THIS IS JUST A TEST');
}
$pdf->Output();
关于“内部服务器”,您应该启用错误报告:
error_reporting(E_ALL);
ini_set('display_errors', 1);
...或者只是查看你的php错误日志了解详细信息。
答案 1 :(得分:3)
<?php
require_once('fpdf/fpdf.php');
require_once('fpdi/fpdi.php');
// initiate FPDI
$pdf = new FPDI();
// get the page count
$pageCount = $pdf->setSourceFile('Laboratory-Report.pdf');
// iterate through all pages
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
// import a page
$templateId = $pdf->importPage($pageNo);
// get the size of the imported page
$size = $pdf->getTemplateSize($templateId);
// create a page (landscape or portrait depending on the imported page size)
if ($size['w'] > $size['h']) {
$pdf->AddPage('L', array($size['w'], $size['h']));
} else {
$pdf->AddPage('P', array($size['w'], $size['h']));
}
// use the imported page
$pdf->useTemplate($templateId);
$pdf->SetFont('Helvetica');
$pdf->SetXY(5, 5);
$pdf->Write(8, 'A complete document imported with FPDI');
}
// Output the new PDF
$pdf->Output();
答案 2 :(得分:0)
它对我有用:
<?php
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');
use \setasign\Fpdi\Fpdi;
$pdf = new FPDI();
// get the page count
$pageCount = $pdf->setSourceFile('pdf_file.pdf');
// iterate through all pages
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
// import a page
$templateId = $pdf->importPage($pageNo);
// get the size of the imported page
$size = $pdf->getTemplateSize($templateId);
// create a page (landscape or portrait depending on the imported page size)
if ($size[0] > $size[1]) {
$pdf->AddPage('L', array($size[0], $size[1]));
} else {
$pdf->AddPage('P', array($size[0], $size[1]));
}
// use the imported page
$pdf->useTemplate($templateId);
$pdf->SetFont('Helvetica');
$pdf->SetXY(5, 5);
$pdf->Write(8, 'A complete document imported with FPDI');
}
$pdf->Output();
更改array($ size [0],$ size [1])的array($ size ['w'],$ size ['h'])
答案 3 :(得分:0)
您可以通过旧的解决方案来执行此操作,但是在这里我在解释如何使用它。
# Add 2 page
$pdf->AddPage();
$tplIdx2 = $pdf->importPage(2);
$pdf->useTemplate($tplIdx2);
$pdf->SetAutoPageBreak(true, 5); # optional line
在这里您必须注意,我正在添加将新页面添加到PDF的 AddPage()代码。添加页面始终排在第一位。这是必需的。
importPage(Page_number)将页面导入PDF的当前页面。
答案 4 :(得分:0)
这对我来说非常有效。 Laravel 实现。而且这只写在你想要的页面上,而不是每一页
use setasign\Fpdf\Tpdf\Fpdf;
use setasign\Fpdi\Fpdi;
class SignDocumentsController extends Controller
{
public function signPDF(Request $data)
{
$pdf = new Fpdi();
$pageCount = $pdf->setSourceFile($data["sourceFile"]);
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$tplIdx = $pdf->importPage($pageNo);
$pdf->AddPage();
$pdf->useTemplate($tplIdx, 5, 5, 205);
$pdf->SetFont('Times');
$pdf->SetTextColor(0, 0, 0);
if($pageNo==$data["pageNumber"]){
$pdf->Image($data["signitureImg"],$data["x"],$data["y"],$data["w"],$data["h"],$data["pictureType"]);
$x = $data["x"]+1;
$y = $data["y"]+$data["h"]+1;
$pdf->SetXY($x,$y);
$pdf->Write(0, date("Y-m-d H:i:s"));
}
$filename=$data["outputFile"];
}
$pdf->Output($filename,'F');
return response()->json([
"success"=>true,
"responseBody" => [
"change_status" =>"Success"
]
], 201);
}
}
json post请求数据为:
{
"sourceFile":"/home/courage/Documents/TM 2020.pdf",
"outputFile":"/home/courage/Documents/Signed.pdf",
"pageNumber":"3",
"signitureImg":"/home/courage/Downloads/signature.png",
"x":"85",
"y":"230",
"w":"30",
"h":"11",
"pictureType":"png"
}