Java读写pdf、pdf转图片工具类
来源:互联网 发布:淘宝怎么参加公益宝贝 编辑:程序博客网 时间:2024/05/17 03:08
本工具类所用到的相关jar包及版本有:
1.pdfbox-1.5.0.jar
2.fontbox-1.5.0.jar
3.jempbox-1.5.0.jar
4.iText-5.0.6.jar;
package com.qunlivideo.common.utils;import java.awt.image.BufferedImage;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageWriter;import javax.imageio.stream.ImageOutputStream;import org.apache.pdfbox.pdfparser.PDFParser;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.util.PDFTextStripper;import com.itextpdf.text.BaseColor;import com.itextpdf.text.Chapter;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Font;import com.itextpdf.text.FontFactory;import com.itextpdf.text.List;import com.itextpdf.text.ListItem;import com.itextpdf.text.PageSize;import com.itextpdf.text.Paragraph;import com.itextpdf.text.Phrase;import com.itextpdf.text.Rectangle;import com.itextpdf.text.Section;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfWriter;/** * 功能 PDF读、写、pdf转图片、图片转pdf */public class PDFUtil {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;public static final String IMG_TYPE_JPG = "jpg";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 void readPDF(String fileName) {File file = null;InputStream in = null;int buff = 1024 * 1024;try {file = new File(fileName);if (file.exists()) {in = new BufferedInputStream(new FileInputStream(fileName),buff);// 新建一个PDF解析器对象PDFParser parser = new PDFParser(in);// 对PDF文件进行解析parser.parse();// 获取解析后得到的PDF文档对象PDDocument pdfdocument = parser.getPDDocument();// 新建一个PDF文本剥离器PDFTextStripper stripper = new PDFTextStripper();// 从PDF文档对象中剥离文本String result = stripper.getText(pdfdocument);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) {}}}}public void pdfToImags(String filePath, String savePath) throws IOException {String fileName = filePath.substring(filePath.lastIndexOf("\\") + 1,filePath.length());fileName = fileName.substring(0, fileName.lastIndexOf("."));File file = null;InputStream in = null;java.util.List pages = null;int buff = 1024 * 1024;PDDocument pdDocument = null;try {file = new File(filePath);if (file.exists()) {in = new BufferedInputStream(new FileInputStream(filePath),buff);PDFParser parser = new PDFParser(in);parser.parse();pdDocument = parser.getPDDocument();pages = pdDocument.getDocumentCatalog().getAllPages();for (int i = 0; i < pages.size(); i++) {PDPage page = (PDPage) pages.get(i);BufferedImage img_temp = page.convertToImage();Iterator iterator = ImageIO.getImageWritersBySuffix(IMG_TYPE_JPG);ImageWriter writer = (ImageWriter) iterator.next();ImageOutputStream imageOut = ImageIO.createImageOutputStream(new FileOutputStream(new File(savePath + "\\" + fileName + "-"+ i + ".jpg")));writer.setOutput(imageOut);writer.write(new IIOImage(img_temp, null, null));}}} catch (Exception e) {e.printStackTrace();} finally {if (pdDocument != null) {pdDocument.close();}}}/** * 测试pdf文件的创建 * * @param args * @throws IOException */public static void main(String[] args) throws IOException {/** * String fileName = "F:\\test.pdf"; // 这里先手动把绝对路径的文件夹给补上。 PDFUtil * pdfUtil = new PDFUtil(); * * Font chapterFont = PDFUtil.createCHineseFont(20, Font.BOLD, new * BaseColor(0, 0, 255));// 文章标题字体 Font sectionFont = * PDFUtil.createCHineseFont(16, Font.BOLD, new BaseColor(0, 0, 255));// * 文章小节字体 Font textFont = PDFUtil.createCHineseFont(10, Font.NORMAL, new * BaseColor(0, 0, 0));// 小节内容字体 * * pdfUtil.createDocument(fileName); Chapter chapter = * PDFUtil.createChapter("adobe PDF范例", 1, 1, 0, chapterFont); Section * section1 = PDFUtil.createSection(chapter, "一", sectionFont, 0); * Phrase text1 = PDFUtil.createPhrase("你好吗", textFont); * section1.add(text1); * * Section section2 = PDFUtil.createSection(chapter, "二", sectionFont, * 0); Phrase text2 = PDFUtil.createPhrase("你好吗", textFont); // * ((Paragraph) text2).setFirstLineIndent(20); //第一行空格距离 * section2.add(text2); * * List list = PDFUtil.createList(true, false, 20); ListItem listItem1 = * PDFUtil.createListItem("我KO你", textFont); ListItem listItem2 = * PDFUtil.createListItem("你OK我 ", textFont); list.add(listItem1); * list.add(listItem2); section2.add(list); * * pdfUtil.writeChapterToDoc(chapter); pdfUtil.closeDocument(); */String filePath = "F:\\test.pdf";String savePath = "F:\\image";PDFUtil pdfUtil = new PDFUtil();pdfUtil.pdfToImags(filePath, savePath);// pdfUtil.readPDF(filePath);}}
- Java读写pdf、pdf转图片工具类
- 【Java】PDF转图片
- Java PDF转图片
- Java PDF 转图片
- java实现pdf转图片pdf
- PDF转图片Java实现
- java pdf文件转 图片
- pdf转图片开源工具
- PDF转图片的工具汇总
- Java中导出pdf文件,pdf工具类demo
- java图片处理以及pdf转图片
- java pdf生成图片
- java生成pdf文件的工具类
- java导出pdf文件工具类
- JAVA的pdf转图片方法
- java之pdf转jpg图片
- 三种pdf转图片java代码
- java实现pdf 转 高清图片
- zhjy工作小结
- SQLserver数据备份与恢复
- 使用JFreeChart在页面展示线图
- C#压缩文件夹及文件夹下的所有文件为zip
- 如何在myeclipse中由命令行参数传入数据
- Java读写pdf、pdf转图片工具类
- VC历程二
- NetworkManager简短介绍
- android 删除手机自带的系统应用
- 分析称Google更应担心微软而非苹果
- 孙振耀退休感言
- linux 下查看进程被占用情况
- HA双机热备的实现(heartbeat)
- 是我不懂珍惜。现在不属于我了。