首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ubuntu18.04上搜索和替换mPDF,CAM

在Ubuntu18.04上搜索和替换mPDF,CAM
EN

Stack Overflow用户
提问于 2019-10-18 11:26:40
回答 1查看 442关注 0票数 1

在Ubuntu18.04上,我有一个编辑PDF文件的问题--特别是搜索和替换字符串。

我试过:

  • PHP mPDF覆盖()什么都不做。
  • perl CAM ::PDF1.60 changepagestring.pl nothing
  • sed .

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

在var / www文件夹、用户/组www- data : www /data和其他文件夹/ home中也尝试过。

对于大容量搜索和替换有什么想法,因为我有超过1000个文件要处理?

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

从程序和在线服务中搜索/替换相同的文件。

对文件0755 I 0777的权限

代码语言:javascript
复制
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脚本总是返回“找不到标题”--更不用说文件的可读性了(见图)

代码语言:javascript
复制
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是在没有警告和错误的情况下正确安装的,并且具有所有的依赖关系。Ubuntu18.04 mPDF版本8.0PHP7.2 Perl 5.26.1 CAM-PDF版本1.60

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

对于PDF文件中的大容量搜索和替换,有什么建议或其他方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 16:25:08

下面是一个目前几乎适用于您的案例的黑客攻击(稍后我会回来并尝试改进这个问题):

代码语言:javascript
复制
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";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58449924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档