看起来没有人回答这个问题......直到现在。以下是 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 循环的起点和终点。这个概念不是“隐藏”一个页面,而是只导入我们希望在最终结果中看到的页面。
这是一个简单的例子。我将定义一些常量来表示不同的页面添加方案:
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 文件的性质,但我认为通过这篇文章,您应该能够弄清楚如何使用 FPDI 需要了解的所有内容选择性地包括源 PDF 文档中的某些页面。编码愉快!