Объединить два PDF-файла в один PDF-файл с помощью PHP - PullRequest
0 голосов
/ 23 июня 2019

Я хочу объединить два файла PDF (шириной 300 мм и высотой 150 мм каждый) на страницу размера SRA3 (шириной 450 мм и высотой 320 мм). Первый файл PDF будет вставлен справа вверху, а секретный файл PDF будет вставлен справа внизу.

Я пытался https://github.com/myokyawhtun/PDFMerger, но он просто объединял PDF один за другим.

<?php
$attached_files = ['file1.pdf', 'file2.pdf'];

$pdf = new \PDFMerger;

foreach ( $attached_files as $attached_file ) {
   $pdf->addPDF( $attached_file, 'all' );
}

$file_name = 'orders-pdf-' . uniqid() . '.pdf';
$pdf->merge( 'download', $file_name );

Может кто-нибудь дать мне пример кода?

1 Ответ

0 голосов
/ 23 июня 2019

На основе комментария @arkascha я построил функцию, которая объединяет два PDF в новый PDF. Я делюсь своим кодом, чтобы любой мог найти его полезным.

function combinePdf( $filePath1, $filePath2 ) {
    // Each actual PDF size is (850.394 * 425.197) points
    // New PDF size need to be SRA3 (1275.8 * 907.2) points

    // Imagick default resolution if resolution not set
    $default_resolution = 72;
    // Multiplier to make resolution around 300
    $multiplier         = 4.167;
    // We found around 300 resolution looks like original image
    $resolution         = ( $default_resolution * $multiplier ); // 300

    // Read first PDF file
    $pdf1 = new \Imagick();
    $pdf1->setResolution( $resolution, $resolution );
    $pdf1->readImage( $filePath1 );

    // Read second PDF file
    $pdf2 = new \Imagick();
    $pdf2->setResolution( $resolution, $resolution );
    $pdf2->readImage( $filePath2 );

    // Build new SRA3 size PDF
    $newPdf = new \Imagick();
    $newPdf->setResolution( $resolution, $resolution );
    $newPdf->newImage( 1275.8 * $multiplier, 907.2 * $multiplier, "white" );
    $newPdf->setImageFormat( 'pdf' );

    // Calculate column offset of the composited PDF
    $x = ( 1275.8 * $multiplier ) - ( 850.394 * $multiplier );

    // Calculate row offset of the second composited PDf
    $y = ( 907.2 * $multiplier - ( $pdf2->getImageHeight() * 2 ) ) + $pdf2->getImageHeight();

    // Composite first and second PDF into new PDF
    $newPdf->compositeImage( $pdf1, \Imagick::COMPOSITE_DEFAULT, $x, 0 );
    $newPdf->compositeImage( $pdf2, \Imagick::COMPOSITE_DEFAULT, $x, $y );

    // Get image string
    $image = $newPdf->getImageBlob();

    return $image;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...