Проблема поиска и замены в mPDF, CAM'PDF в Ubuntu 18.04
В Ubuntu 18.04 у меня проблема с редактированием PDF-файлов, особенно с поиском и заменой строк.
Я попытался:
PHP mPDF Overwrite() ничего не делает.
perl CAM:: PDF 1.60 changepagestring.pl ничего не делать
sed, ничего не делай.
Не работает со сжатыми или распакованными PDF-файлами. Не работает даже с PDF-файлами, созданными из mPDF. ОБНОВЛЕНИЕ: после переустановки libsodium mPDF отлично работает с файлами PDF, созданными из mPDF. Для других файлов PDF проблема все еще существует.
Также пробовал в папках var / www user / group www-data: www / data и в других папках / home, например.
Есть идеи для массового поиска и замены, потому что мне нужно обработать более 1000 файлов?
Текст в файлах читабельный. Проверьте.
PS Поиск / замена из программы и онлайн-сервиса работает с одинаковыми файлами.
Разрешение на файлы 0755 i 0777
root@sasa-ubuntu-1:/var/www/website.local/wp-content/test/2018/12# ls -la *.pdf
-rwxr-xr-x 1 www-data www-data 847451 Oct 18 12:21 clean.pdf
-rwxrwxrwx 1 www-data www-data 395527 Oct 17 21:41 My-First.pdf
-rwxr-xr-x 1 www-data www-data 838307 Oct 17 23:30 My.pdf
-rwxr-xr-x 1 www-data www-data 838167 Oct 18 12:24 New2.pdf
-rwxr-xr-x 1 www-data www-data 838167 Oct 18 01:20 New.pdf
-rwxrwxrwx 1 www-data www-data 270340 Oct 17 16:39 Test2.pdf
-rwxrwxrwx 1 www-data www-data 274022 Oct 17 16:39 Test1.pdf
-rwxr-xr-x 1 www-data www-data 838000 Oct 18 00:55 Test2.pdf
-rwxrwxrwx 1 www-data www-data 205679 Oct 17 23:44 test.pdf
Сценарий Perl всегда возвращает "Не удалось найти заголовок", не обращая внимания на удобочитаемость файла, когда я печатаю переменную $page (см. Изображения)
use CAM::PDF;
my $pdf = CAM::PDF->new('test.pdf'); # existing document
my $nump = $pdf->numPages();
#print $nump;
my $page = $pdf->getPageContent(1);
print $page;
# $page now holds the uncompressed page content as a string
# replace the text part
if ($page =~ s/Wagner/SoundTech/g) {
$pdf->setPageContent(1, $page);
}
else {
die "Could not find title\n";
}
$pdf->cleanoutput('Test2.pdf');
На этом заканчивается много файлов.
Строка, которую я пытаюсь найти, - это "Международные музыкальные экзамены Вагнера" или только "Вагнер".
Надеюсь, mPDF и CAM-PDF установлены правильно, без предупреждений и ошибок и со всеми зависимостями. Ubuntu 18.04 mPDF версия 8.0 PHP 7.2 Perl 5.26.1 CAM-PDF версия 1.60
У mPDF иногда бывают ошибки с функцией Overwrite(), которые я обнаружил в их сообществе github.
Есть ли предложения или другой способ массового поиска и замены в файлах PDF?
1 ответ
Вот хак, который в настоящее время работает почти для вашего случая (я вернусь позже и попробую улучшить это):
use feature qw(say);
use strict;
use warnings;
# the PDF uses a non-standard encoding so it does not help to use UTF-8
# use open qw(:std :encoding(UTF-8));
use utf8;
use CAM::PDF;
my $fn = 'test.pdf'; # uncompressed file..
my $save_fn = 'test2.pdf';
my $pdf = CAM::PDF->new($fn);
my $nump = $pdf->numPages();
my $match = 0;
my $replace = '[(\x{a9} SoundTech International Music Examinations)]TJ';
for my $i (1..$nump) {
my $page = $pdf->getPageContent( $i );
# replace the text part
if ($page =~ s/\[\(\x{a9}\).*?\]TJ/$replace/g) {
$match = 1;
$pdf->setPageContent($i, $page);
}
}
if ( $match ) {
$pdf->cleanoutput($save_fn);
say "Save $save_fn ..";
}
else {
say "No match";
}