本帖最后由 anson1599 于 2026-1-16 15:42 编辑
因为经常要把收到PDF格式的电子发票,按照时间、票号、金额来改文件名,所以想找个能解析PDF里面文字输出文本的工具,找了一圈没找到合适的,所以就用 Aardio 写了一个命令行小工具,之前写了一个直接改文件名的,但想到每个人可能想改的名字并不一样,所以就直接输出文本,如果有需要可以根据文本自己写正则改文件名吧。
写的自用小工具,没做太多测试,Win10下工作正常,Win7下会报错,但功能正常,也不知道为什么。
工具名称:pdf2txt.exe
使用方法:只能在命令行模式下运行
pdf2txt.exe <pdf文件> 默认输出所有页的文本
pdf2txt.exe -p=1 <pdf文件> -p参数,指定输出某1页的文本,1就是第1页,2就是第2页,-1就是倒数第1页,-2就是倒数第2页
输出结果就是PDF文件里的文本,没有其它的,如果想保存到文件,加个管道就行,比如 pdf2txt.exe xxx.pdf > xxx.txt
https://anson1599.lanzoub.com/iWsaW3g9daqd
密码:52pj
顺便分享一下,我通过 Directory Opus 利用 pdf2txt 改发票名称的脚本
[JavaScript] 纯文本查看 复制代码 function OnClick(clickData) {
if (clickData.func.sourcetab.selected_files.count > 0) {
for (var eSel = new Enumerator(clickData.func.sourcetab.selected_files); !eSel.atEnd(); eSel.moveNext()) {
if (eSel.item().ext.toLowerCase() === '.pdf') {
var objShell = new ActiveXObject('WScript.Shell');
var objExec = objShell.Exec('D:\\Soft\\PDF Tools\\pdf2txt.exe -p=-1 ' + eSel.item().RealPath);
var txt = objExec.StdOut.ReadAll();
//DOpus.Output(txt);
var match = /(\d{20})\s*(\d{4})\s*年\s*(\d{2})\s*月\s*(\d{2})\s*日/.exec(txt);
var money = /[整分]\s¥(\d+\.\d{2})\s/.exec(txt);
if (match && money) {
var newName = match[2] + match[3] + match[4] + '_' + match[1] + '_(' + money[1] + ')';
clickData.func.command.RunCommand('Rename FROM ' + eSel.item().RealPath + ' TO ' + newName + ' IGNOREEXT');
}
}
}
}
}
|