登峰小蚁 2020-03-03
去年一年偷了下懒, 博客写了一点就没写了, 还好一些大的flag完成了. 花了半年的空余时间, 培养了一门兴趣爱好. 自己在为人处世上还是不够圆滑啊, 也难怪. 自己当初选择走技术这条路的初衷希望以后都能一直坚持. 知世故而不世故.
这两天公司业务有关PDF查找, PDF读取这些功能操作, 在网上看了一些资料, 花了一天左右试了三种方法, 想着记录记录, 以后工作中可能会用的上.在网上看了三种方式, apache pdfbox, itext, spire pdf.
spire pdf 有具体是半开源的java 类库, 是由国内的一个团队开发维护的. 有免费版, 付费版. 免费版是完全免费的,没有红色的警告信息。但是免费版存在篇幅限制. 并且免费版也没有付费版稳定,功能没有付费版强大。免费版有10页的页数输出限制, 在输出结果文档时只能输出前10页, 将PDF文档转换为图片, word, HTML, xps等格式时, 仅支持转换前10页,如超出限制, 可升级到商业版, 我们仅对免费版进行不定期维护. 其中不管是免费还是付费版 都不支持OCR识别图片获取图片中的文字, 无法直接操作线上文件,比如给个线上的url进行加载,这样不行. 但是操作本地或项目里的ok. 其中的功能点用图片替换PDF中的图片, 读取查找PDF, PDF中某些字段高亮显示等. 具体可见 https://www.e-iceblue.cn/Introduce/Spire-PDF-JAVA.html
itext 功能操作点也还是挺多的, 例如word, Excel, PDF等. 前年年底上家公司有导出表格, Excel转word 功能. 记得就是用itext实现的, 本来代码是拷贝到 u 盘中的, 结果u 盘被同事用了一次就坏了. 这其中的相关代码就不能展现出来了.
Apache PDFbox是一个开源的、基于Java的、支持PDF文档生成的工具库,它可以用于创建新的PDF文档,修改现有的PDF文档,还可以从PDF文档中提取所需的内容。Apache PDFBox还包含了数个命令行工具。
官网地址:https://pdfbox.apache.org/index.html 我这两天试了试进不去. 说起来这两天就连maven 下载jar 也很慢, 下载不了, 不知道是不是疫情影响. Apache PDFbox 在网上有许多文章博客的. 虽然官网跟相关api文档下载不了, 看不了. 但是我想有这些文章博客也还是ok的
代码. (一般我博客上的代码都是可以直接复用的)
public static void main(String[] args) throws Exception {// File pdfFile = new File("C:\\\\Users\\\\沐白\\\\Desktop\\\\上高县劲松金刚石工具厂.PDF"); String path = "http://123.com/上高县劲松金刚石工具厂.PDF"; String ssContent = ""; URL url = new URL(path); //想要读取的url地址 URLConnection conn = url.openConnection(); PDDocument document = null; ArrayList<String> list = new ArrayList<>(); try { // 方式一: InputStream input = conn.getInputStream(); //加载 pdf 文档 PDFParser parser = new PDFParser(new RandomAccessBuffer(input)); parser.parse(); document = parser.getPDDocument(); // 方式二:// document= PDDocument.load(pdfFile); // 获取页码 int pages = document.getNumberOfPages(); // 读文本内容 PDFTextStripper stripper=new PDFTextStripper(); // 设置按顺序输出 stripper.setSortByPosition(true); stripper.setStartPage(1); stripper.setEndPage(pages); String content = stripper.getText(document); String str = ""; int state = 0; BufferedReader bre = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content.getBytes(Charset.forName("utf8"))), Charset.forName("utf8"))); while ((str = bre.readLine())!= null) { if(str.contains(ssContent)){ list.add(str); } } }catch(Exception e){ e.printStackTrace(); } }
其中需要到的 pdfbox jar , fontbox jar 可以观看我另一篇随笔, 小工具. 其中有许多实用的线上小工具, 当然了是我个人而言