Как получить текстовые формы защищенные от копирования PDF-файлы или имеющие разные шрифты?
Я использую pdfparser для копирования текста из PDF-файлов, но некоторые PDF-файлы защищены от копирования или имеют разные шрифты, так что pdfparser не работает для этого, возможно ли получить текст из PDF-файла, защищенного от копирования?
Это мой код:
// Include Composer autoloader if not already done.
error_reporting(E_ALL);
ini_set('display_errors', 1);
include 'vendor/autoload.php';
// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile('tests.pdf');
// Retrieve all pages from the pdf file.
$pages = $pdf->getPages();
// Loop over each page to extract text.
foreach ($pages as $page) {
echo utf8_encode($page->getText());
}
?>
После попытки этого кода я не получаю никакой ошибки или предупреждения. Этот код показывает только пустое пространство. Я также пробовал кодировку utf-8, но она все еще не работает?
2 ответа
\Smalot\PdfParser не может извлекать файлы, защищенные паролем.
Я нашел гораздо лучшее решение для этого (при условии, что ваша служба PHP работает на сервере Linux): используйте инструмент командной строки « pdftotext » (входит в пакет «poppler», например, в Debian или Ubuntu).
Он отлично обрабатывает файлы, защищенные паролем (при необходимости есть возможность указать пароль).
Используется с чем-то вроде этого внутри скрипта PHP под веб-сервером на сервере Linux с файлом PDF, отправленным через веб-форму:
// $filepath is the full file path properly extracted from the $_FILES variable
// after form submission.
// Expected running under Linux+Apache+PHP; if not, you may have to find your way.
if (! file_exists($filepath)) {
// In case systemd private temporary directory feature is active.
$filepath = '/proc/'.posix_getppid().'/root'.$filepath;
}
$cwdt = 4; // may be better fine tuned for better column alignment
// “sudo” is necessary mostly with systemd private temporary directory
// feature. Needs proper sudoers configuration, of course.
$cmd = "sudo /usr/bin/pdftotext -nopgbrk -fixed {$cwdt} {$filepath} -";
exec($cmd, $output, $res);
print_r($output);
Однако я не знаю, является ли это ответом на требование «или наличие разных шрифтов».
Если автор документа PDF указал флаги "Разрешения" документа, чтобы запретить копирование или извлечение текста и графики, вам следует учитывать это. Однако, не все программное обеспечение в формате PDF соблюдает такие ограничения.