Я использую «PDF Parser» в проекте Laravel 5.4, чтобы получить содержимое файла pdf. Но когда я сбрасываю содержимое, я получаю закодированный текст, который при наведении курсора читает «5868 двоичных символов или символов, отличных от UTF-8».
Это код, который должен читать содержимое файла.
$file = $request->file('file');
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile($file);
$scannedText = $pdf->getText();
dd($scannedText);
который сбрасывает что-то вроде этого:
x00i\x00n\x00g\x00ª\x00t\x00h\x00i
Функция PHP mb_detect_encoding() возвращает false, когда "тип кодирования" установлен на "авто".
utf8_encode() тоже не работает, поэтому я знаю, что это не кодировка ISO-8859-1.
Вот где я застрял. Любая помощь приветствуется.
Это сложно. Вы не можете преобразовать кодировку, пока не узнаете исходную кодировку. Я бы посмотрел, смогу ли я извлечь информацию о кодировке из самого исходного файла PDF. Возможно, используемая вами библиотека абстракций, Smalot\PdfParser\Parser, сможет предоставить эту информацию? В противном случае вам нужно будет посмотреть другие решения для синтаксического анализа PDF. Это интересная проблема - держите нас в курсе вашего возможного решения! :)
Спасибо за быстрый ответ, ребята. @kieranpotts Я проверил файл pdf, шрифты в кодировке Identity-H. Кроме того, когда я использую встроенную файловую систему Laravel для получения содержимого (вместо пакета PdfParser), а затем выгружаю содержимое, отображается некоторый нечитаемый текст, но теперь кодировка кажется другой. Итак, я делаю mb_detect_encoding и получаю «UTF - 8». На этот раз я считаю, что проблема заключается в попытке сбросить содержимое файла. Поправьте меня если я ошибаюсь.
@deceze, это хорошая мысль. Но я ищу более простое программное решение, которое я могу кодировать. Хотя спасибо ... Очень признателен.






В моем проекте я получил аналогичную ошибку с «PDF Parser».
Но у меня больше не было этой ошибки, используя: https://github.com/spatie/pdf-to-text.
Вы можете использовать композитор для его установки:
composer require spatie/pdf-to-text
А работает это так:
use Spatie\PdfToText\Pdf;
$pdf = (new Pdf())->setPdf('sample.pdf');
$pdf->setOptions(['layout']);
dump($pdf->text());
Я работал над этим проектом около года назад и помню, как после некоторой борьбы с PDF Parser я переключился на PdfToText, и это сработало отлично. Но забыл разместить это здесь. В любом случае, спасибо за ваш ответ.
Загрузите необработанные байты в шестнадцатеричный / текстовый редактор и выберите разные кодировки для интерпретации содержимого, пока не найдете кодировку, в которой текст выглядит правильно. Если каждый второй байт -
00, возможно, вы просматриваете текст в кодировке UTF-16.