Проблема с размером импортированного шаблона PDF с FPDI+TCPDF

Я застрял в очень сложной ситуации. Я работаю над веб-приложениями PHP для поздравительной открытки.

для этого я использую некоторые инструменты Linux и TCPDF и FPDI. Позвольте мне рассказать вам, как все это работает:

есть 4-страничный шаблон поздравительной открытки PDF-файл. это пользовательский размер 5x7 дюймов 300dpi PDF-файл. Я также добавил пользовательский размер в TCPDF

case 'STANDARD_CARD'       : {$pf = array(1500.00,2100.00);break;}

что я делаю, я использую:

pdftk templateX.pdf burst output  page_%2d.pdf 

чтобы разделить каждую страницу храма.

теперь я использовать :

$pdf = new FPDI($cardDetails['ORIENTATION'],"mm",$cardDetails['SIZE']);      


  //set source file for 
    $pdf->setSourceFile($pdfFile);
    $templateIndex = $pdf->importPage(1);
    $pdf->AddPage($cardDetails['ORIENTATION'],$cardDetails['SIZE']);
    $pdf->useTemplate($templateIndex,0,0);

другие вещи, как, написание сообщений печати изображений. и в конце сохраните файл, используя:

$pdf->output("file_name.pdf","F");

оригинальный PDF-файл (только 1-я страница): (5x7 дюймов) оригинальный pdf-файл Модифицированный PDF и некоторые операции PDF: (29x20 дюймов) измененный PDF

теперь вывод, который я получаю, не 5x7 pdf, это файл 29 x 20 дюймов, и это также разрушает мой расчет и PDF.

Пожалуйста, скажите мне, что Я поступаю неправильно...

3 ответов


Привет Ravish,

я столкнулся также с этой проблемой. На самом деле мой сценарий таков. У меня есть оригинальный файл, который является законного размера (8,5 мм х 14mmmm). Когда я показываю его, используя выход FPDI, как вы это сделали, он отображает только размер письма(8.5 мм x 11мм). Итак, результат: обрезанные PDF файл.

Я сделал несколько googling и нашел несколько ответов тоже из разных сообщений. Вот самое актуальное решение, которое Я нашел.

во-первых, это часть кода функции ниже:useTemplate

$this->useTemplate($templateIndex, null, null, 0, 0, true);

обычно некоторые разработчики устанавливают это как TRUE для последнего аргумента. Да, это правильно, если вы не устанавливаете ширину и длину. Тем не менее, я хотел бы подчеркнуть, что 4-й и 5-й аргумент определяет ширину и длину импортированного PDF. Итак, если вы примете или получите фактический размер импортированного документа, установите последний аргумент в FALSE поскольку это скажет, что он будет принимать фактический или конкретный размер, который вы установили.

пожалуйста, возьмите этот образец кодов, которые я сделал:

$pdf = new FPDI();
$pdf -> setSourceFile('birform2316.pdf');
$tplIdx = $pdf -> importPage(1);
$size = $pdf->getTemplateSize($tplIdx);
$pdf -> AddPage();
$pdf ->useTemplate($tplIdx, null, null, $size['w'], 310, FALSE);
$pdf -> SetFont('Arial');
$pdf -> SetTextColor(0, 0, 0);
$pdf -> SetXY(18, 174);
$pdf -> Write(0, $employer_address);
$pdf -> Output('myOwn.pdf', 'D');

С помощью этого кода я создал новый PDF БЕЗ ОБРЕЗКИ импортированный файл, который я установил. Значение, все детали шаблона (исходный файл) была показана.

Пожалуйста, обратите внимание также, что я заметил что - то при установке размера моего PDF:

во-первых, мой файл имеет первоначальная ширина 215.6 мм и своя длина 350,9 мм. Теперь, когда я устанавливаю размер моего PDF, используя функции getTemplateSize и useTemplate, например:

$size = $pdf->getTemplateSize($tplIdx);
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE);

или просто:

$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE);

в результате мой новый файл PDF является обрезанные внизу, и я не знаю, почему.

С этого наблюдения, я сделал несколько тестов, чтобы выяснить причину. И результат, который пришел, есть ограничение длины при создании PDF-файла с помощью FPDI. Как вы можете видеть в моем коде выше, я не использовал фактическую длину моего файла. Вместо использования 350.9 мм, которые могут быть получены из $size[h'], Я не использовал его, так как он даст обрезанный файл. Я просто передал числовое значение рядом с ним и фактическую ширину, чтобы получить желаемый результат.

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false);

кстати, 310 мм (длина) - это самое большое числовое значение, которое я использовал для создания нового PDF-файла, который НЕ ОБРЕЗАНО.

I надеюсь, я дал некоторые материалы всем разработчикам, использующим FPDI, который сталкивается с проблемой обрезанных результатов PDF.

спасибо всем...

Леви Палмер


вместо

$pdf->useTemplate($templateIndex,0,0);

использовать

$this->useTemplate($templateIndex, null, null, 0, 0, true);

последний аргумент $adjustPageSize по умолчанию установлено значение "false".


у меня была такая же проблема. Мой pdf был обрезан справа, а снизу FDPI добавлял пространство. Я обнаружил, что мой pdf имел ширину=215 и высоту=279, в то время как FPDI экспортировал каждый раз 210x297.

useTemplate функция может масштабировать ваш pdf до определенного размера, но выход все равно останется 210x297. Поэтому я оставил useTemplate со значениями по умолчанию и "adjustPageSize" =true:

$pdf->useTemplate($templateId, 0, 0, 0, 0, true);

что нужно изменить размер, чтобы соответствовать оригинальной размер:

$templateSize = $pdf->getTemplateSize($templateId);
$pdf->AddPage('', [$templateSize['w'], $templateSize['h']]);

если вы собираетесь загружать альбомные PDF-файлы, вы должны установить ориентацию:

$templateSize = $pdf->getTemplateSize($templateId);
$orientation = $templateSize['w'] > $templateSize['h'] ? 'L' : 'P';
$pdf->AddPage($orientation, [$templateSize['w'], $templateSize['h']]);