我正在尝试编写文件重命名Perl脚本,以减少手动操作。手动打开pdf文件,复制标题并根据标题重命名文件名。
我正在编写下面的代码,根据文件标题重命名pdf。例如SPE-180024-MS是标题,pdf应该重命名为
根据我的逻辑,它应该重命名文件,但输出不正确
IntentFilter filter = new IntentFilter();
filter.addAction(SendList.mReceiver.TEST);
registerReceiver(receiver,filter);
这是文件。标记的标题是我想要的。
答案 0 :(得分:1)
您不能只打开PDF文件并对其进行操作。它与文本文件不同,因此必须进行解析。 您可以使用CAM::PDF。它会将您的pdf转换为文本,以后可以对其进行分析以获得标题。
上面提供的链接涵盖了足够的东西来完成工作。我在这里复制一些相关的东西
use CAM::PDF;
my $pdf = CAM::PDF->new('test1.pdf');
$pageNum = 1
my $page1 = $pdf->getPageContent(pageNum);
变量page1
将具有pageNum变量指定的页面内容。休息是提取所需信息的问题。
如果您发现将整个pdf转换为文本,那么您可以使用getpdftext.pl这是CAM :: PDF的一部分,但与阅读单个页面相比效率低。
答案 1 :(得分:1)
PDF通常有一堆元数据,其中就是文档标题。如果你很幸运,你会在那里找到所需的PDF标题。使用use autodie;
use Modern::Perl;
use PDF::API2;
my $file = '/your/sample/file.pdf';
my $pdf = PDF::API2->open( $file );
my %pdf_info = $pdf->info;
my $title = $pdf_info{Title};
my $renamed_dir = '/some/where/else/';
if ( $title ) {
my $new_name = $renamed_dir . $title;
if ( -f $new_name ) {
warn "File $new_name already exists, move it out of the way!";
} else {
$pdf->saveas( $new_name );
}
} else {
warn "No title found in document info.";
}
及其info方法的Perl示例:
poppler-utils
如果您需要使用文本的某些部分,则应首先将其转换为文本。由于您未提及任何操作系统限制,因此您可以获得Debian / Ubuntu解决方案。首先,安装包pdftotext
。然后使用新安装的工具pdftotext -layout
从PDF中提取所有文本。使用< <
> >
" "
' '
& &
可能是个好主意。从生成的文本中,您必须使用&#34;标题&#34;来grep /解析该行,然后使用它来重命名(或更安全:复制)PDF。