Объединить несколько PDF в один документ (linux, php)

Author Автор: Роман Чернышов    Опубликовано: 14 декабря 2024

Доброго времени друзья! Небольшая заметка о том, как объединить несколько PDF в один документ используя утилиту pdfunite в операционной системой Linux, и вызовом её из PHP. Несмотря на то, что задача предельно простая, я решил написать об этом, чтобы в будущем если понадобиться, данное просто решение, было под рукой. И так задача: — имеем два или более PDF документа, и нам нужно объединить их в один. О решении по шагам, далее подробнее.

Устанавливаем pdfunite

В зависимости от ОС которая у вас используется, устанавливаем нужный пакет:

Debian

apt-get install poppler-utils

Ubuntu

apt-get install poppler-utils

Alpine OS

apk add poppler

Arch Linux

pacman -S poppler

Kali Linux

apt-get install poppler-utils

CentOS

yum install poppler-utils

Fedora

dnf install poppler-utils

Raspbian

apt-get install poppler-utils

MacOS

brew install poppler

Синтаксис

Для объединения двух и более документов PDF в один, вызываем утилиты со следующими параметрами:

pdfunite path/to/fileA.pdf path/to/fileB.pdf path/to/merged_output.pdf

Где fileA.pdf и fileB.pdf исходные документы, а merged_output.pdf получаемый результат.

Вызов из PHP

Ничего необычного, просто используем команду PHP для выполнения внешней команды exec(). Для того, чтобы объединить два и более документа, содержащихся в одной директории в один, используем следующий PHP скрипт:

$files = array();
$dh = opendir($dir . '/'); // Список файлов в директории
 
while (false !== ($file = readdir($dh))) {
	if ($file != '.' && $file != '..' 
		&& !is_dir($path.$file) && $file[0] != '.'
		&& strpos($file, '.pdf') !== false // Только PDF
	) {
 
		$files[] = $dir . '/' . $file;
	}
}
sort($files); // Сортируем файлы по алфавиту
if(count($files) > 0) {
 
	$outFileOrig = $dir . "/orders.pdf";
	$outFile = $dir . "/orders_0.pdf";
	foreach($files as $k => $file) {
 
		if($k == 0) {
			exec("cp $file $outFile");
		} else {
			$outFileNew = $dir . "/orders}_{$k}.pdf";
			exec("/usr/bin/pdfunite {$file} {$outFile} {$outFileNew}");
			exec("rm $outFile");
			$outFile = $outFileNew;
		}
	}
        exec("mv {$outFile} {$outFileOrig}");
}

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка