项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询。

talk is cheap,show me the code

第一种 使用开源组织提供的开源框架 pdfbox

特点:免费,功能强大,解析中文或许会存在乱码,格式有点乱,没有国产解析的那么美化。

可以按照指定的模板,对pdf进行修改添加删除等操作,总之操作很骚,很强大。

1 pdfbox 需要带入依赖

org.apache.pdfbox

pdfbox

2.0.15

org.apache.pdfbox

fontbox

2.0.15

org.apache.pdfbox

jempbox

1.8.16

2 代码

/**

* 功能 PDF读写类

* @CreateTime 2011-4-14 下午02:44:11

*/

public class PDFUtil {

// public static final String CHARACTOR_FONT_CH_FILE = "SIMFANG.TTF"; //仿宋常规

public static final String CHARACTOR_FONT_CH_FILE = "SIMHEI.TTF"; //黑体常规

public static final Rectangle PAGE_SIZE = PageSize.A4;

public static final float MARGIN_LEFT = 50;

public static final float MARGIN_RIGHT = 50;

public static final float MARGIN_TOP = 50;

public static final float MARGIN_BOTTOM = 50;

public static final float SPACING = 20;

private Document document = null;

/**

* 功能:创建导出数据的目标文档

* @param fileName 存储文件的临时路径

* @return

*/

public void createDocument(String fileName) {

File file = new File(fileName);

FileOutputStream out = null;

document = new Document(PAGE_SIZE, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);

try {

out = new FileOutputStream(file);

// PdfWriter writer =

PdfWriter.getInstance(document, out);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (DocumentException e) {

e.printStackTrace();

}

// 打开文档准备写入内容

document.open();

}

/**

* 将章节写入到指定的PDF文档中

* @param chapter

* @return

*/

public void writeChapterToDoc(Chapter chapter) {

try {

if(document != null) {

if(!document.isOpen()) document.open();

document.add(chapter);

}

} catch (DocumentException e) {

e.printStackTrace();

}

}

/**

* 功能 创建PDF文档中的章节

* @param title 章节标题

* @param chapterNum 章节序列号

* @param alignment 0表示align=left,1表示align=center

* @param numberDepth 章节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号

* @param font 字体格式

* @return Chapter章节

*/

public static Chapter createChapter(String title, int chapterNum, int alignment, int numberDepth, Font font) {

Paragraph chapterTitle = new Paragraph(title, font);

chapterTitle.setAlignment(alignment);

Chapter chapter = new Chapter(chapterTitle, chapterNum);

chapter.setNumberDepth(numberDepth);

return chapter;

}

/**

* 功能:创建某指定章节下的小节

* @param chapter 指定章节

* @param title 小节标题

* @param font 字体格式

* @param numberDepth 小节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号

* @return section在指定章节后追加小节

*/

public static Section createSection(Chapter chapter, String title, Font font, int numberDepth) {

Section section = null;

if(chapter != null) {

Paragraph sectionTitle = new Paragraph(title, font);

sectionTitle.setSpacingBefore(SPACING);

section = chapter.addSection(sectionTitle);

section.setNumberDepth(numberDepth);

}

return section;

}

/**

* 功能:向PDF文档中添加的内容

* @param text 内容

* @param font 内容对应的字体

* @return phrase 指定字体格式的内容

*/

public static Phrase createPhrase(String text,Font font) {

Phrase phrase = new Paragraph(text,font);

return phrase;

}

/**

* 功能:创建列表

* @param numbered 设置为 true 表明想创建一个进行编号的列表

* @param lettered 设置为true表示列表采用字母进行编号,为false则用数字进行编号

* @param symbolIndent

* @return list

*/

public static List createList(boolean numbered, boolean lettered, float symbolIndent) {

List list = new List(numbered, lettered, symbolIndent);

return list;

}

/**

* 功能:创建列表中的项

* @param content 列表项中的内容

* @param font 字体格式

* @return listItem

*/

public static ListItem createListItem(String content, Font font) {

ListItem listItem = new ListItem(content, font);

return listItem;

}

/**

* 功能:创造字体格式

* @param fontname

* @param size 字体大小

* @param style 字体风格

* @param color 字体颜色

* @return Font

*/

public static Font createFont(String fontname, float size, int style, BaseColor color) {

Font font = FontFactory.getFont(fontname, size, style, color);

return font;

}

/**

* 功能: 返回支持中文的字体---仿宋

* @param size 字体大小

* @param style 字体风格

* @param color 字体 颜色

* @return 字体格式

*/

public static Font createCHineseFont(float size, int style, BaseColor color) {

BaseFont bfChinese = null;

try {

bfChinese = BaseFont.createFont(CHARACTOR_FONT_CH_FILE,BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

} catch (DocumentException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return new Font(bfChinese, size, style, color);

}

/**

* 最后关闭PDF文档

*/

public void closeDocument() {

if(document != null) {

document.close();

}

}

/**

* 读PDF文件,使用了pdfbox开源项目

* @param fileName

*/

public static void readPDF(String fileName) {

File file = new File(fileName);

FileInputStream in = null;

try {

in = new FileInputStream(fileName);

// 新建一个PDF解析器对象

PDFParser parser = new PDFParser(new RandomAccessFile(file,"rw"));

// 对PDF文件进行解析

parser.parse();

// 获取解析后得到的PDF文档对象

PDDocument pdfdocument = parser.getPDDocument();

// 新建一个PDF文本剥离器

PDFTextStripper stripper = new PDFTextStripper();

// 从PDF文档对象中剥离文本

String result = stripper.getText(pdfdocument);

FileWriter fileWriter = new FileWriter(new File("pdf.txt"));

fileWriter.write(result);

fileWriter.flush();

fileWriter.close();

System.out.println("PDF文件的文本内容如下:");

System.out.println(result);

} catch (Exception e) {

System.out.println("读取PDF文件" + file.getAbsolutePath() + "生失败!" + e);

e.printStackTrace();

} finally {

if (in != null) {

try {

in.close();

} catch (IOException e1) {

}

}

}

}

/**

* 测试pdf文件的创建

* @param args

*/

public static void main(String[] args) {

String fileName = "C:\Users\tizzy\Desktop\测试.pdf"; //这里先手动把绝对路径的文件夹给补上。

PDFUtil pdfUtil = new PDFUtil();

pdfUtil.writeChapterToDoc(chapter);

pdfUtil.closeDocument();

}

}

第二种 使用国产的框架 Spire.PDF

包含两种版本

1 仓库地址 和 依赖

com.e-iceblue

e-iceblue

http://repo.e-iceblue.com/nexus/content/groups/public/

e-iceblue

spire.pdf.free

2.2.2

2 代码

public static void main(String[] args) {

// 创建PdfDocument实例

PdfDocument doc = new PdfDocument();

// 加载PDF文件

doc.loadFromFile("D:\\JAVA核心知识点整理.pdf");

StringBuilder sb = new StringBuilder();

PdfPageBase page;

int totalPageCount = doc.getPages().getCount();

// 遍历PDF页面,获取文本

for (int i = 0; i < totalPageCount; i++) {

page = doc.getPages().get(i);

System.out.println("pageNo:" + i);

sb.append(page.extractText(true));

}

FileWriter writer;

try {

// 将文本写入文本文件

writer = new FileWriter("ExtractText.txt");

writer.write(sb.toString());

writer.flush();

} catch (IOException e) {

e.printStackTrace();

}

doc.close();

}

第三种 使用iTika 进行解析pdf

对中文支持不是很友好,解析的格式和pdfbox类似

1 依赖

org.apache.tika

tika-core

1.20

2 代码

public static String getPdfFileText(String fileName) throws IOException {

PdfReader reader = new PdfReader(fileName);

PdfReaderContentParser parser = new PdfReaderContentParser(reader);

StringBuffer buff = new StringBuffer();

TextExtractionStrategy strategy;

for (int i = 1; i <= reader.getNumberOfPages(); i++) {

strategy = parser.processContent(i,

new SimpleTextExtractionStrategy());

buff.append(strategy.getResultantText());

}

return buff.toString();

}

java tika pdf_java解析pdf获取pdf中内容信息相关推荐

  1. java解析pdf获取pdf中内容信息

    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...

  2. 用Python提取解析pdf文档中内容

    用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...

  3. python之pdfminer:从PDF文档中抽取信息的工具

    pdfminer是一个用于从PDF文档中抽取信息的Python库.它提供了一系列的功能,使我们能够读取和解析PDF文件,并从中提取文本内容.元数据.页面布局和图片等.本文将详细介绍pdfminer库的 ...

  4. android json 解析图片,JSON解析并获取android中的图像

    我想解析包含字符串和图像的JSON对象.我的代码正在工作,但它加载图像太慢.我想加载另一个asynctask或服务的图像,以减少加载时间.我怎样才能做到这一点?哪一个是最好的方法使用asynctask ...

  5. spring五:获取容器中对象信息

    // 获取容器中对象信息@Testpublic void test2(){String configLocation = "applicationContext.xml"; // ...

  6. Java实现批量替换文本文档中内容

    Java实现批量替换文本文档中内容 有更好的方案大佬们也可以在评论区指出 import java.io.*; import java.util.HashMap; import java.util.Ma ...

  7. java 填充pdf_Java创建和填充PDF表单域方法

    表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...

  8. java 解密pdf_Java 加密和解密 PDF

    在日常工作中,当我们需要传输一些重要的PDF文件.合同时,为了避免机密内容被第三方窥探到,我们可以对PDF文件进行加密.当这份文件能够公开了,又可以对其进行解密.那么我们如何在Java应用程序中实现这 ...

  9. java 字体名字_JAVA:获取系统中可用的字体的名字

    import java.awt.*; public class GetLocalFontFamily { public static void main(String[] agrs) { //获取系统 ...

  10. java 解析excel获取单元格内容封装方法(兼容2003和2007)

    支持xls2003及xlsx2007导入excel //导入excel接口 @RequestMapping(params = "importDecMainCode", method ...

最新文章

  1. 【算法学习】堆排序建立最大堆
  2. deploy java eclipse_使用eclipse的mvn deploy部署本地包到maven私有库
  3. CSDN如何自动生成目录
  4. 数据结构课程设计----基数排序
  5. 【Java】什么?你项目还在用Date表示时间?!日期类LocalDateTime的使用
  6. node.js 建立live-server
  7. qt下设置按钮不接收键盘鼠标但能响应 clicked()信号
  8. Nacos 快速开始
  9. 雷军:若小米9首月供货不足百万 就去工厂拧螺丝
  10. Fiddler及浏览器开发者工具进行弱网测试
  11. pythondocx更新目录_python根目录
  12. kernel编译速度提高
  13. GitHub使用.md
  14. maven:Java heap space内存不足错误的解决方法
  15. 微信客服消息群发 php,利用客服消息和模板消息实现微信群发(突破群发接口的上限)...
  16. 【程序人生】《你相信上帝的存在吗?》
  17. 为什么日本是世界上少有的“100V电压国家”,并且就连国内都不能统一供电频率?
  18. 如何正确检测文件类型?
  19. Java返回报文有单双引号_Spring MVC 响应结果有反斜杠转义字符+双引号
  20. ibm3630m4服务器装系统,ibm x3630m4安装Windows2008R2系统

热门文章

  1. Webservice接口调用工具类
  2. 推荐一个超级好用的XML编辑器
  3. linux脚本对登录密码加密,shell 脚本明文密码加密小工具
  4. SQL触发器编写与查看
  5. 计量经济学及Stata应用 陈强 第八章自相关习题8.3
  6. Homekit直连的灯带控制套装
  7. 此计算机上未安装sql2000,Windows10系统安装sql2000没有反应如何解决
  8. web前端——旋转3D魔方
  9. 钉钉 消息防撤回 分析
  10. 如何备份光猫html文件夹,华为光猫分区备份,还原,制作固件教程