Хотите отправить все чертежи, отчеты, информацию о различных отделах своему начальнику, но все ли это разные PDF-файлы, содержащие соответствующую информацию? Многие пользователи просто объединяют PDF-файлы и все. Объединение файлов в общий PDF-файл является чрезвычайно полезным и необходимым в настоящее время, поэтому, если вы предлагаете какое-то административное приложение для какого-либо предприятия, добавление такой функции в вашу систему может быть полезным, так что им не нужно устанавливать внешнюю программу или делать это онлайн. используя сторонний сервис.
В этой статье мы покажем, как объединить несколько PDF-файлов в один с помощью библиотеки PDFMerger.
1. Установите pdfmerger
PDFMerger использует (устанавливаются автоматически как зависимости) классы fpdf и fpdi от Setasign. Есть другие версии оригинальной библиотеки, портирован в PHP5 как оригинальная библиотека был размещен в codeplex, однако у них нет минимального уровня стабильности (они работают, но не с композитором). Библиотечный форк, работающий с composer, создан @rguedes, Что касается Laravel, любая зависимость, которую вы хотите использовать, требует минимального уровня стабильности (не dev-master). Чтобы продолжить установку пакета в вашем проекте Laravel, откройте терминал, перейдите в каталог вашего проекта и установите библиотеку, используя composer:
composer require rguedes/pdfmerger
После установки вы сможете использовать класс PDFMerger и его методы. Для получения дополнительной информации о форке этой библиотеки, посетите хранилище в Github здесь.
2. Использование библиотеки
Использование библиотеки очень просто и понятно, вы создаете экземпляр PDF-слияния. Этот класс позволяет объединять множество файлов по вашему желанию с помощью метода addPDF и, наконец, генерировать объединенный результат с помощью метода слияния. Вы можете выбрать, какие страницы PDF-файлов должны быть добавлены в окончательный вариант, решить, как и где будет создан конечный PDF-файл.
Указание страниц для слияния
Класс PDFMerger позволяет объединять многие PDF-файлы, как вы хотите и нуждаетесь, используя addPDF
метод, вам нужно только указать путь в качестве первого аргумента и указать, какие страницы файла должны быть объединены в окончательный файл, используя второй аргумент, который ожидает строку. Например, вы можете объединить все страницы PDF:
$pdf = new PDFMerger();
// Add all the pages of the PDF to merge
$pdf->addPDF("somePdfToMerge.pdf", 'all');
Укажите, какие именно страницы вы хотите, указав их номер через запятую:
$pdf = new PDFMerger();
// Add only the pages 1, 3 and 5
$pdf->addPDF("somePdfToMerge.pdf", '1, 3, 5');
Или используя диапазон, например, от страницы 5 до 10:
$pdf = new PDFMerger();
// Add only the pages from 5 to 10
$pdf->addPDF("somePdfToMerge.pdf", '5-10');
Модель слияния
Используя метод слияния, вы создадите PDF-файл, содержащий добавленные файлы (указанные страницы каждого PDF-файла). Этот файл может быть сохранен или возвращен как ответ в соответствии с вашими потребностями. Метод для обработки PDF должен быть предоставлен в качестве первого аргумента метода слияния, возможные значения для этого аргумента: browser
, download
, string
или же file
, В качестве второго аргумента — путь, в котором будет сохранен PDF-файл (если в качестве метода используется файл) или имя PDF-файла, который будет использоваться для его возврата (с browser
или же download
):
Генерация прямой загрузки
Если вам не нужно никуда сохранять PDF-файл, а просто сгенерировать его и вернуть как ответ, вы можете принудительно загрузить сгенерированный PDF-файл напрямую, используя идентификатор загрузки:
addPDF($pdfFile1Path, 'all');
$pdf->addPDF($pdfFile3Path, '1, 2, 3');
// Generate download of "mergedpdf.pdf"
$pdf->merge('download', "mergedpdf.pdf");
}
}
Сохранение в файл
Вы можете сохранить объединенный результат в файл на вашем сервере:
addPDF($pdfFile1Path, 'all');
$pdf->addPDF($pdfFile2Path, 'all');
// Merge the files into a file in some directory
$pathForTheMergedPdf = public_path() . "/result.pdf";
// Merge PDFs into a file
$pdf->merge('file', $pathForTheMergedPdf);
// Do something else here, as return
// a response from the controller ...
}
}
Получить двоичное содержимое результата pdf
В случае, если вам нужно извлечь содержимое сгенерированного файла (двоичные данные), не сохраняя его где-либо, вы можете использовать метод строкового вывода для извлечения содержимого как переменной. В этом случае мы вернем двоичный контент как ответ с заголовками PDF (для просмотра в браузере). Вы также можете использовать тип браузера, если хотите:
addPDF($pdfFile1Path, 'all');
$pdf->addPDF($pdfFile2Path, 'all');
// Merge the files and retrieve its PDF binary content
$binaryContent = $pdf->merge('string', "mergedpdf.pdf");
// Return binary content as response
return response($binaryContent)
->header('Content-type' , 'application/pdf')
;
}
}