去年一年偷了下懒, 博客写了一点就没写了, 还好一些大的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  可以观看我另一篇随笔,  小工具.   其中有许多实用的线上小工具, 当然了是我个人而言

PDF 相关操作的更多相关文章

  1. Selenium2+python自动化40-cookie相关操作

    前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...

  2. 强大的pdf文件操作小工具——PDFtk的小白用法 【转载】

    转载出处https://www.cnblogs.com/basterdaidai/p/6204518.html 前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题. ...

  3. 从零自学Hadoop(20):HBase数据模型相关操作上

    阅读目录 序 介绍 命名空间 表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  4. 从零自学Hadoop(21):HBase数据模型相关操作下

    阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  5. 理解CSV文件以及ABAP中的相关操作

    在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...

  6. Liunx下的有关于tomcat的相关操作 && Liunx 常用指令

    先记录以下liunx下的有关于tomcat的相关操作 查看tomcat进程: ps-ef|grep java (回车) 停止tomcat进程: kill -9 PID (进程号如77447) (回车) ...

  7. pip的相关操作

    >Python中的pip是什么?能够做些什么? pip是Python中的一个进行包管理的东西,能够下载包.安装包.卸载包......一些列操作 >怎么查看pip的相关信息 在控制台输入: ...

  8. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  9. php对二维数组进行相关操作(排序、转换、去空白等)

    php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04   这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...

随机推荐

  1. centos mysql无法删除数据库

    系统版本是CentOS Linux release 7.4.1708 (Core) 数据库版本mysql  Ver 14.14 Distrib 5.6.39 在执行drop database ga-s ...

  2. Linux服务器性能查看命令

    一.uptime命令 [root@#test~]# uptime15:26:42 up 101 days, 18:44,  3 users,  load average: 0.18, 0.22, 0. ...

  3. P2448 无尽的生命(树状数组+离散化)

    题目描述 逝者如斯夫,不舍昼夜! 叶良辰认为,他的寿命是无限长的,而且每天都会进步. 叶良辰的生命的第一天,他有1点能力值.第二天,有2点.第n天,就有n点.也就是S[i]=i 但是调皮的小A使用时光 ...

  4. Linux 杀死进程方法大全(kill,killall)

    杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志.   首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:   # kill -pid   注释:标准的kill命令通常 ...

  5. 高性能JAVA开发之内存管理

    这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题,调研了一些java内存管理的资料,现整理如下: 一.JVM中的对象生命周期 对象的生命周期一般分为7个阶段:创建阶段,应用阶段,不可视阶 ...

  6. iOS渐变视图&动画库、腰杆、音频水滴水波手势、多种对话框、四级展开效果等源码

    iOS精选源码 用户行为追踪--无侵入埋点 .终端日志的打印 支持storyboard的渐变视图&动画库 支持圆形.竖直.横向的摇杆 纯swift实现的类似excel表格效果 swift实现自 ...

  7. 收集到的技术相关网址——python

    1.Python中常用数据库访问接口模块 专用数据库连接模块——MySQL.SQLite.PostgreSQL.Oracle.IBM DB2.Infomix.Interbase.Sybase.SQL ...

  8. 函数动态参数和Python中的三种空间

    动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...

  9. By virtue of|sustain|post |scrape off |stretch|access to|take into account of|exploit|hasten|blur |idle|bored her to|account for|accused of|cruelty

    By virtue of this superior quality, this product is often sold out of stockin many areas. 我们的产品因其优秀的 ...

  10. 推送至远程仓库使用git push -u的原因

    第一次把本地仓库推送至远端时,为了以后方便一定要使用 git push -u origin master [此处是把本地的master分支推送至远程的master分支]