根据PDF标题重命名文件

时间:2016-03-17 11:11:33

标签: perl pdf rename batch-rename

我正在尝试编写文件重命名Perl脚本,以减少手动操作。手动打开pdf文件,复制标题并根据标题重命名文件名。

我正在编写下面的代码,根据文件标题重命名pdf。例如SPE-180024-MS是标题,pdf应该重命名为

根据我的逻辑,它应该重命名文件,但输出不正确

IntentFilter filter = new IntentFilter();
filter.addAction(SendList.mReceiver.TEST);
registerReceiver(receiver,filter);

这是文件。标记的标题是我想要的。

enter image description here

2 个答案:

答案 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中提取所有文本。使用< &lt; > &gt; " &quot; ' &apos; & &amp; 可能是个好主意。从生成的文本中,您必须使用&#34;标题&#34;来grep /解析该行,然后使用它来重命名(或更安全:复制)PDF。