Как получить текстовые формы защищенные от копирования 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 соблюдает такие ограничения.

Другие вопросы по тегам