я использую 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, прямо с их документация:
Это простой пример 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
Я получаю только страницы 2-4, если в документе изначально было 4 или более страниц. Если я использую 3-страничный документ, я получаю страницы 2-3. Вы должны изменить условия так, чтобы они наилучшим образом соответствовали вашим потребностям, поскольку я не знаю природу файлов PDF, которые вы планируете импортировать, но я думаю, что с помощью этого поста вы сможете выяснить все, что вам нужно знать о том, как использовать FPDI выборочно включать определенные страницы из исходного документа PDF. Удачного кодирования!
Других решений пока нет …