FPDI 从 PDF 输出中删除页面
FPDI remove page from PDF output
我正在使用 FPDF
和 FPDI
来执行以下操作
require_once('pdfs/fpdf.php');
require_once('pdfs/fpdi.php');
// initiate FPDI
$pdf = new FPDI();
// set the sourcefile
$pdf->setSourceFile('pdfs/originals/document.pdf');
//for ($i = 1; $i < 43; $i++) {
for ($i = 1; $i < 10; $i++) {
$pdf->AddPage();
$tplidx = $pdf->ImportPage($i);
$pdf->useTemplate($tplidx, 10, 0, 200);
有没有办法根据 if 语句从最终输出中隐藏页面?比如$middlepages
等于或者大于2,我需要展示2个特定的页面,但是如果$middlepages
是1,我只需要展示第2个页面的第一页。
似乎没有人回答这个问题……直到现在。这是 FPDI 工作流程的基础知识,直接来自他们的 documentation:
- 定义要从中获取页面的文档
- 导入文档的现有页面
- 在使用 FPDF 创建的页面上使用导入的页面
这是一个简单的 FPDI 实例:
$pdf = new FPDI();
$pageCount = $pdf->setSourceFile('file.pdf');
// Iterate through every page
for( $pageNo=1; $pageNo<=$pageCount; $pageNo++ )
{
$templateId = $pdf->importPage($pageNo);
// Determine if page is portrait or landscape
$size = $pdf->getTemplateSize($templateId);
if( $size['w']>$size['h'] )
$pageFormat = 'L'; // landscape
else
$pageFormat = 'P'; // portrait
$pdf->addPage($pageFormat,array($size['w'],$size['h']));
$pdf->useTemplate($templateId);
}
$pdf->Output();
太棒了!现在让我们看看您的具体需求,即只添加一定数量的页面。如您所见,我们使用 for
循环遍历文档的所有导入页面,从第 1 页开始到最后一页,包括在内。如果您想更改添加的页面,您只需更改 for
循环的起点和终点。这个概念不是"hide"一个页面,而是只导入我们希望在最终结果中看到的页面。
这是一个简单的例子。我将定义一些常量来表示不同的页面添加方案:
const PDF_FIRSTPAGE = 1;
const PDF_MIDDLEPAGES = 2;
在我的页面导入循环之前,我将通过这个开关来确定每个条件的开始页面和结束页面。这是在最初声明 PDF 之后。请注意我如何根据 $pageCount
检查值以确保我不会尝试导入不存在的页面:
switch( $loopCondition )
{
// By default, include everything
default:
$pageStart = 1;
$pageEnd = $pageCount;
break;
// Include only the first page
case PDF_FIRSTPAGE:
$pageStart = 1;
$pageEnd = 1;
break;
// Include pages 2-4, but only if those pages exist
case PDF_MIDDLEPAGES:
if( $pageCount>=2 )
{
$pageStart = 2;
if( $pageCount>=4 )
{
$pageEnd = 4;
}
else
{
$pageEnd = $pageCount;
}
}
else
{
$pageStart = 1;
$pageEnd = 1;
}
break;
}
最后,我修改了你在上面看到的 for
循环:
for( $pageNo=$pageStart; $pageNo<=$pageEnd; $pageNo++ )
现在,如果我将变量 $loopCondition
设置为 PDF_MIDDLEPAGES
,如果文档最初有 4 页或更多页,我只会得到第 2-4 页作为输出。如果我使用 3 页的文档,我会得到第 2-3 页。您应该更改条件以最适合您的需要,因为我不知道您计划导入的 PDF 文件的性质,但我认为有了这个 post 您应该能够弄清楚您需要知道的一切如何使用 FPDI 有选择地包含源 PDF 文档中的某些页面。编码愉快!
我正在使用 FPDF
和 FPDI
来执行以下操作
require_once('pdfs/fpdf.php');
require_once('pdfs/fpdi.php');
// initiate FPDI
$pdf = new FPDI();
// set the sourcefile
$pdf->setSourceFile('pdfs/originals/document.pdf');
//for ($i = 1; $i < 43; $i++) {
for ($i = 1; $i < 10; $i++) {
$pdf->AddPage();
$tplidx = $pdf->ImportPage($i);
$pdf->useTemplate($tplidx, 10, 0, 200);
有没有办法根据 if 语句从最终输出中隐藏页面?比如$middlepages
等于或者大于2,我需要展示2个特定的页面,但是如果$middlepages
是1,我只需要展示第2个页面的第一页。
似乎没有人回答这个问题……直到现在。这是 FPDI 工作流程的基础知识,直接来自他们的 documentation:
- 定义要从中获取页面的文档
- 导入文档的现有页面
- 在使用 FPDF 创建的页面上使用导入的页面
这是一个简单的 FPDI 实例:
$pdf = new FPDI();
$pageCount = $pdf->setSourceFile('file.pdf');
// Iterate through every page
for( $pageNo=1; $pageNo<=$pageCount; $pageNo++ )
{
$templateId = $pdf->importPage($pageNo);
// Determine if page is portrait or landscape
$size = $pdf->getTemplateSize($templateId);
if( $size['w']>$size['h'] )
$pageFormat = 'L'; // landscape
else
$pageFormat = 'P'; // portrait
$pdf->addPage($pageFormat,array($size['w'],$size['h']));
$pdf->useTemplate($templateId);
}
$pdf->Output();
太棒了!现在让我们看看您的具体需求,即只添加一定数量的页面。如您所见,我们使用 for
循环遍历文档的所有导入页面,从第 1 页开始到最后一页,包括在内。如果您想更改添加的页面,您只需更改 for
循环的起点和终点。这个概念不是"hide"一个页面,而是只导入我们希望在最终结果中看到的页面。
这是一个简单的例子。我将定义一些常量来表示不同的页面添加方案:
const PDF_FIRSTPAGE = 1;
const PDF_MIDDLEPAGES = 2;
在我的页面导入循环之前,我将通过这个开关来确定每个条件的开始页面和结束页面。这是在最初声明 PDF 之后。请注意我如何根据 $pageCount
检查值以确保我不会尝试导入不存在的页面:
switch( $loopCondition )
{
// By default, include everything
default:
$pageStart = 1;
$pageEnd = $pageCount;
break;
// Include only the first page
case PDF_FIRSTPAGE:
$pageStart = 1;
$pageEnd = 1;
break;
// Include pages 2-4, but only if those pages exist
case PDF_MIDDLEPAGES:
if( $pageCount>=2 )
{
$pageStart = 2;
if( $pageCount>=4 )
{
$pageEnd = 4;
}
else
{
$pageEnd = $pageCount;
}
}
else
{
$pageStart = 1;
$pageEnd = 1;
}
break;
}
最后,我修改了你在上面看到的 for
循环:
for( $pageNo=$pageStart; $pageNo<=$pageEnd; $pageNo++ )
现在,如果我将变量 $loopCondition
设置为 PDF_MIDDLEPAGES
,如果文档最初有 4 页或更多页,我只会得到第 2-4 页作为输出。如果我使用 3 页的文档,我会得到第 2-3 页。您应该更改条件以最适合您的需要,因为我不知道您计划导入的 PDF 文件的性质,但我认为有了这个 post 您应该能够弄清楚您需要知道的一切如何使用 FPDI 有选择地包含源 PDF 文档中的某些页面。编码愉快!