xpdf读取pdf文件并根据pdf内容修改文件名称

0:前言

今天一哥们说他苦逼,导师逼他看文档,全是pdf,而且还是英文的,而且非常多,1000多个,我了个shit,更搞的是文档名字不是标题名,是编号,什么5026a001.pdf,都是这种

然后我说你写个程序把文件名修改了不就完了,他没空,我就帮他写了写

1:准备工作

  1. 上网查资料,C++读取pdf库,java读取pdf库,最后找到了xpdf库,还好,下载地址【下载xpdf地址】,我下载的是windows版的,然后按照步骤实验了一下
  2. 实验,打开压缩包,读了读readme,然后进入bin32文件夹,里面好多exe可执行文件,好吧,开始搞起
  3. 拷贝一个pdf文件进去,然后cmd命令行进入bin32文件夹,
    pdftotext.exe 5026a001.pdf
    然后果然生成了一个5026a001.txt,打开一看,哇,完美转换,看来不需要配置什么东西就能执行。
  4. 开始写程序,java代码的,开始的想法是通过pdftotext转成txt,然后解析txt文档,后来一看还有一个可执行程序pdfinfo.exe,感觉这个是读取pdf文档信息的程序。
  5. 命令行
    pdfinfo.exe 5026a001.pdf
    然后在屏幕上完美输出,说明他的标题直接可以拿到,那太好了,verygood
  6. 下一步的任务就是获得在cmd中执行程序后返回的结果值的任务了,就是获得这些Title啊,Subject啊等等,
  7. 然后就好办了,把所有的pdf放在一个文件夹中,java读取这个文件夹,然后每个pdf都执行pdfinfo.exe这个程序,然后解析获得的结果,然后在修改文件名,其中有等多细节,比如获得的标题里面有的字符不能作为文件名的,比如/ 、\ * ?等等,那好吧,开始搞起
  8. package com.sunlei;import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;import javax.crypto.spec.IvParameterSpec;public class Rename {/*** @param args* @throws IOException*/public static void main(String[] args) {// TODO Auto-generated method stub// System.out.println("hello\n");File file = new File("D:\\pdf");//pdf文件夹String xpdfPath = "D:\\TDDOWNLOAD\\xpdfbin-win-3.03\\bin32\\pdfinfo.exe ";//pdfinfo.exe文件夹,注意这个exe和后面的pdf文件名有空格,所以这里有空格File[] fileListFiles = file.listFiles();// 取出文件夹下所有的文件for (int i = 0; i < fileListFiles.length; i++) {String cmd = xpdfPath + fileListFiles[i].getAbsolutePath();try {Process process = Runtime.getRuntime().exec(cmd);BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));//获得exe执行程序返回结果String firstLine = br.readLine();//只需要读取第一行就行,只要标题// System.out.println(firstLine);// System.out.println(firstLine.indexOf('D')); //下面substring的时候为什么是16,是通过这个实验出来的if (firstLine != null) {String subTitle = firstLine.substring(16);if (!subTitle.equals("")) {subTitle = subTitle.replace(':', ' ');// 去掉文件名不合规范的subTitle = subTitle.replace('*', ' ');subTitle = subTitle.replace('/', ' ');subTitle = subTitle.replace('?', ' ');String title = subTitle + ".pdf";//加上后缀名File newFile;if (title != "untitled.pdf" && title != ".pdf") {newFile = new File("D:/pdf/" + title);// System.out.println(title);if (fileListFiles[i].renameTo(newFile)) {//修改文件名System.out.println(fileListFiles[i].getName()+ "修改成功");} else {System.out.println(fileListFiles[i].getName()+ "修改失败");}}br.close();//别忘了关闭流process.destroy();}else {System.out.println(fileListFiles[i].getName()+ "因为文中没有文件title而修改失败");}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
    }
    
  9. 结果是除了那些空文档的不修改之外,其他都搞定,上图
  10. 代码写的比较乱,如果有需要下载的话【demo下载地址】





本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部