使用来自两个 PDF 的不同图像创建一个具有 FPDI/TCPDF 的 PDF
Use different image from two PDF for create one PDF with FPDI/TCPDF
我会使用来自两个不同 PDF 的两个不同页面来创建一个包含两个页面的 PDF。
为此,我使用 FPDF 并且我已经这样做了:
$finalPDF = new Fpdi();
$secondPDF = new Fpdi();
$personalizationPdfPath = "Path_of_my_first_PDF";
$templatePath = "Path_of_my_second_PDF";
$finalPDF->setSourceFile($templatePath);
$secondPDF->setSourceFile($personalizationPdfPath);
// Import the first page
$page1 = $pdfFinal->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);
// Import the second page of second PDF
$page2 = $secondPDF->importPage(2, PdfReader\PageBoundaries::MEDIA_BOX);
// Get the size
$dimension = $finalPDF->getTemplateSize($template_page);
// Add the page
$finalPDF->AddPage($dimension["orientation"], array($dimension["width"], $dimension["height"]));
// Apply the page1 on the finalPDF
$finalPDF->useTemplate($page1, 0, 0, $dimension["width"], $dimension["height"]);
// Apply the page2 on the finalPDF
$finalPDF->useTemplate($page2, 20, 28, $dimension["width"]*0.75, $dimension["height"]*0.75); //error
但是当我运行它时,我有模板不存在的错误。如果我把 $page1 而不是 $page2 它工作,两个页面合并。第一个 100% 尺寸和第二个 75% 尺寸。
我不知道为什么 $page2 不工作。我已经使用 dd(dump die) 来查看两个 $pages 之间的区别,没有什么相关的。
所以我使用替代方法,将 $page2 转换为图片并使用 AddImage 方法:
$imageFromPDF = "Path_of_my_image.jpg";
$finalPdf->Image($imageFromPDF, 35, 35, $dimension["width"]*0.70, $dimension["height"]*0.70, "JPG");
$pdfFinal->Output("F", "nameOfPdf");
效果不错,就是质量不好。我读过这个 subject 但质量仍然很差。
这两种方式,谁有好的解决办法?
谢谢
一步一步来吧。不需要 2 个 FPDI 实例。
$pdf = new Fpdi();
// set the first document as the source
$pdf->setSourceFile($templatePath);
// then import the first page of it
$page1 = $pdf->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);
// now set the second document as the source
$pdf->setSourceFile($personalizationPdfPath);
// and import the second page of it:
$page2 = $pdf->importPage(2, PdfReader\PageBoundaries::MEDIA_BOX);
// to get the size of an imported page, you need to pass the
// value returned by importPage() and not an undefined variable
// such as $template_page!!
$dimensions = $pdf->getTemplateSize($page1); // or $page2?
// Add a page
$pdf->AddPage($dimension["orientation"], $dimension);
// ...now use the imported pages as you want...
// Apply the page1 on the finalPDF
$pdf->useTemplate($page1, 0, 0, $dimension["width"], $dimension["height"]);
// Apply the page2 on the finalPDF
$pdf->useTemplate($page2, 20, 28, $dimension["width"] * 0.75, $dimension["height"] * 0.75);
值 20
和 28
在我看来很奇怪,但这正是您使用的值。
我会使用来自两个不同 PDF 的两个不同页面来创建一个包含两个页面的 PDF。 为此,我使用 FPDF 并且我已经这样做了:
$finalPDF = new Fpdi();
$secondPDF = new Fpdi();
$personalizationPdfPath = "Path_of_my_first_PDF";
$templatePath = "Path_of_my_second_PDF";
$finalPDF->setSourceFile($templatePath);
$secondPDF->setSourceFile($personalizationPdfPath);
// Import the first page
$page1 = $pdfFinal->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);
// Import the second page of second PDF
$page2 = $secondPDF->importPage(2, PdfReader\PageBoundaries::MEDIA_BOX);
// Get the size
$dimension = $finalPDF->getTemplateSize($template_page);
// Add the page
$finalPDF->AddPage($dimension["orientation"], array($dimension["width"], $dimension["height"]));
// Apply the page1 on the finalPDF
$finalPDF->useTemplate($page1, 0, 0, $dimension["width"], $dimension["height"]);
// Apply the page2 on the finalPDF
$finalPDF->useTemplate($page2, 20, 28, $dimension["width"]*0.75, $dimension["height"]*0.75); //error
但是当我运行它时,我有模板不存在的错误。如果我把 $page1 而不是 $page2 它工作,两个页面合并。第一个 100% 尺寸和第二个 75% 尺寸。 我不知道为什么 $page2 不工作。我已经使用 dd(dump die) 来查看两个 $pages 之间的区别,没有什么相关的。
所以我使用替代方法,将 $page2 转换为图片并使用 AddImage 方法:
$imageFromPDF = "Path_of_my_image.jpg";
$finalPdf->Image($imageFromPDF, 35, 35, $dimension["width"]*0.70, $dimension["height"]*0.70, "JPG");
$pdfFinal->Output("F", "nameOfPdf");
效果不错,就是质量不好。我读过这个 subject 但质量仍然很差。
这两种方式,谁有好的解决办法? 谢谢
一步一步来吧。不需要 2 个 FPDI 实例。
$pdf = new Fpdi();
// set the first document as the source
$pdf->setSourceFile($templatePath);
// then import the first page of it
$page1 = $pdf->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX);
// now set the second document as the source
$pdf->setSourceFile($personalizationPdfPath);
// and import the second page of it:
$page2 = $pdf->importPage(2, PdfReader\PageBoundaries::MEDIA_BOX);
// to get the size of an imported page, you need to pass the
// value returned by importPage() and not an undefined variable
// such as $template_page!!
$dimensions = $pdf->getTemplateSize($page1); // or $page2?
// Add a page
$pdf->AddPage($dimension["orientation"], $dimension);
// ...now use the imported pages as you want...
// Apply the page1 on the finalPDF
$pdf->useTemplate($page1, 0, 0, $dimension["width"], $dimension["height"]);
// Apply the page2 on the finalPDF
$pdf->useTemplate($page2, 20, 28, $dimension["width"] * 0.75, $dimension["height"] * 0.75);
值 20
和 28
在我看来很奇怪,但这正是您使用的值。