Php 搜寻及;更换mPDF、CAM和x27上的问题;Ubuntu 18.04上的PDF

Php 搜寻及;更换mPDF、CAM和x27上的问题;Ubuntu 18.04上的PDF,php,perl,ubuntu-18.04,mpdf,cam-pdf,Php,Perl,Ubuntu 18.04,Mpdf,Cam Pdf,在Ubuntu 18.04上,我在编辑PDF文件时遇到了一个问题——特别是搜索和替换字符串 我试过: PHP mPDF Overwrite()什么也不做 perl CAM::PDF 1.60 changepagestring.pl不做任何事情 塞德,什么也不做 不适用于压缩或解压缩的PDF,甚至不适用于mPDF生成的PDF。 更新:重新安装后,mPDF可以很好地处理由M mPDF生成的PDF文件。对于其他PDF文件,问题仍然存在 还尝试在var/www folders user/group

在Ubuntu 18.04上,我在编辑PDF文件时遇到了一个问题——特别是搜索和替换字符串

我试过:

  • PHP mPDF Overwrite()什么也不做

  • perl CAM::PDF 1.60 changepagestring.pl不做任何事情

  • 塞德,什么也不做

不适用于压缩或解压缩的PDF,甚至不适用于mPDF生成的PDF。 更新:重新安装后,mPDF可以很好地处理由M mPDF生成的PDF文件。对于其他PDF文件,问题仍然存在

还尝试在var/www folders user/group www data:www/data和其他文件夹/home中使用,例如

因为我有1000多个文件要处理,所以有没有关于批量搜索和替换的想法

文件中的文本是可读的。检查

请注意,程序和在线服务中的搜索/替换适用于相同的文件。

文件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
当我打印$page变量时,Perl脚本始终返回“找不到标题”,而不考虑文件的可读性(参见图片)

很多文件都以这种方式结束

我试图找到的字符串是“瓦格纳国际音乐考试”或仅“瓦格纳”

我希望mPDF和CAM-PDF安装正确,没有警告和错误,并且具有所有依赖性。 Ubuntu 18.04 mPDF 8.0版 PHP7.2 Perl 5.26.1 CAM-PDF版本1.60

我在他们的github社区中发现,mPDF偶尔会出现Overwrite()函数的错误

对PDF文件中的批量搜索和替换有什么建议或其他方法吗


以下是一个目前几乎适用于您的案例的破解方法(我稍后会回来尝试改进):


你能提供PDF文件的链接吗?当然,有两个版本,压缩版和未压缩版(用pdftk解压,文件名以“u_uuu”前缀开头),谢谢链接!我尝试将未压缩文件grep为“Wagner”,但它不匹配,但是,我能够找到
Wagner
。如果您查看
pdf2txt.py
的源代码,您应该能够了解如何进行替换请参见。看起来不错。你知道为什么在©登录转换的PDF之前会出现一些单引号吗?似乎PDF不使用UTF-8或ASCII,复制权符号©在UTF-8中是
\x{c2}\x{a9}
,在扩展ASCII中是
\x{c2}
,但PDF使用
\x{a9}
来表示符号。我已经更新了答案,现在似乎有效了
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');
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";
}