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.


person BN83    schedule 02.04.2015    source источник


Ответы (1)


Похоже, никто не задавался этим вопросом... до сих пор. Вот основы рабочего процесса FPDI, прямо из их документации:

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

person Muhammad Abdul-Rahim    schedule 06.05.2015
comment
Это гораздо более естественный способ кодирования, чем та ерунда, с которой я столкнулся! - person BN83; 07.05.2015