Java使用PDFBox开发包实现对PDF文档内容编辑与保存
pdfbox开发包下载地址:http://pdfbox.apache.org/
程序实现了PDF文档的创建,读入,与修改PDF内容并保存。
可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究过!
源代码如下:
package com.gloomyfish.ups.pdf.reader; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.List; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdfparser.PDFStreamParser; import org.apache.pdfbox.pdfwriter.ContentStreamWriter; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDStream; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.util.PDFOperator; import org.apache.pdfbox.util.PDFTextStripper; /** * http://pdfbox.apache.org/ * * @author fish * */ public class PDFReader { public PDFReader() { createHelloPDF(); readPDF(); editPDF(); } public void createHelloPDF() { PDDocument doc = null; PDPage page = null; try { doc = new PDDocument(); page = new PDPage(); doc.addPage(page); PDFont font = PDType1Font.HELVETICA_BOLD; PDPageContentStream content = new PDPageContentStream(doc, page); content.beginText(); content.setFont(font, 12); content.moveTextPositionByAmount(100, 700); content.drawString("Hello"); content.endText(); content.close(); doc.save("D:\\gloomyfish\\pdfwithText.pdf"); doc.close(); } catch (Exception e) { System.out.println(e); } } public void readPDF() { PDDocument helloDocument; try { helloDocument = PDDocument.load(new File( "D:\\gloomyfish\\pdfwithText.pdf")); PDFTextStripper textStripper = new PDFTextStripper(); System.out.println(textStripper.getText(helloDocument)); helloDocument.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void editPDF() { try { // pdfwithText PDDocument helloDocument = PDDocument.load(new File("D:\\gloomyfish\\pdfwithText.pdf")); // PDDocument helloDocument = PDDocument.load(new File("D:\\gloomyfish\\hello.pdf")); // int pageCount = helloDocument.getNumberOfPages(); PDPage firstPage = (PDPage)helloDocument.getDocumentCatalog().getAllPages().get(0); // PDPageContentStream content = new PDPageContentStream(helloDocument, firstPage); PDStream contents = firstPage.getContents(); PDFStreamParser parser = new PDFStreamParser(contents.getStream()); parser.parse(); List tokens = parser.getTokens(); for (int j = 0; j < tokens.size(); j++) { Object next = tokens.get(j); if (next instanceof PDFOperator) { PDFOperator op = (PDFOperator) next; // Tj and TJ are the two operators that display strings in a PDF if (op.getOperation().equals("Tj")) { // Tj takes one operator and that is the string // to display so lets update that operator COSString previous = (COSString) tokens.get(j - 1); String string = previous.getString(); string = string.replaceFirst("Hello", "Hello World, fish"); //Word you want to change. Currently this code changes word "Solr" to "Solr123" previous.reset(); previous.append(string.getBytes("ISO-8859-1")); } else if (op.getOperation().equals("TJ")) { COSArray previous = (COSArray) tokens.get(j - 1); for (int k = 0; k < previous.size(); k++) { Object arrElement = previous.getObject(k); if (arrElement instanceof COSString) { COSString cosString = (COSString) arrElement; String string = cosString.getString(); string = string.replaceFirst("Hello", "Hello World, fish"); // Currently this code changes word "Solr" to "Solr123" cosString.reset(); cosString.append(string.getBytes("ISO-8859-1")); } } } } } // now that the tokens are updated we will replace the page content stream. PDStream updatedStream = new PDStream(helloDocument); OutputStream out = updatedStream.createOutputStream(); ContentStreamWriter tokenWriter = new ContentStreamWriter(out); tokenWriter.writeTokens(tokens); firstPage.setContents(updatedStream); helloDocument.save("D:\\gloomyfish\\helloworld.pdf"); //Output file name helloDocument.close(); // PDFTextStripper textStripper = new PDFTextStripper(); // System.out.println(textStripper.getText(helloDocument)); // helloDocument.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (COSVisitorException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new PDFReader(); } }
转载于:https://blog.51cto.com/gloomyfish/1400312
Java使用PDFBox开发包实现对PDF文档内容编辑与保存相关推荐
- java中operationBox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存
pdfbox开发包下载地址:http://pdfbox.apache.org/ 程序实现了PDF文档的创建,读入,与修改PDF内容并保存. 可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究 ...
- java pdfbox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存
pdfbox开发包下载地址:http://pdfbox.apache.org/ 程序实现了PDF文档的创建,读入,与修改PDF内容并保存. 可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究 ...
- IText实现对PDF文档属性的基本设置
一.Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
- java加密解密 pdf_Java 加密和解密PDF文档
前言 在日常办公时,为了保护文档不被他人篡改,我们可为文档设置打开口令,即加密.同时,因需要我们也可对加密文档进行解密,以便能够查看和编辑文档.本文将通过Java程序来演示如何对PDF文档进行加密和解 ...
- 使用HttpHandler解析并展示PDF文档内容
前言 如果我们想将服务端的PDF文档内容展示给客户端,往往会通过URL直接访问的方式.这样一来,PDF文档就会毫无保留的保存到客户端去,通过浏览器的PDF插件,客户端可以随意拷贝PDF的副本.(如下图 ...
- HttpHandler解析并展示PDF文档内容
2019独角兽企业重金招聘Python工程师标准>>> HttpHandler 解析并展示 PDF 文档内容 如果我们想将服务端的 PDF 文档内容展示给客户端,往往会通过 URL ...
- 【解密】PDF文档忘记编辑密码 照样编辑
本文目录 方式一.打开网站,解除限制 方式二.使用 " PDF 补丁丁 " 软件 在文档编辑过程中,为了防止别人修改我们的文档,常常会给文档设置限制编辑的密码.不过有时也会&quo ...
- Pdf文档在线编辑控件源码及演示
支持Pdf文档在线编辑,并可以进行另存管理. PdfTestSite为演示文件夹 PdfViewer为控件源码控件 test.pdf为模版文件 注意:服务器端需要安装Adobe Reader以便进行更 ...
最新文章
- 双非高校浙工大,一年2项研究上Nature,校友纷纷打Call:欠一个211名头
- 笔试真题及其答案解析:国内各大银行计算机方向笔试之计算机基础知识—选择题120题
- 【笔记】python os的使用 文件批量重命名 批量移动文件 将png转jpg代码
- 错误代码大全【100(临时响应)】【200(成功)】【300(已重定向)】【400(请求错误)】【500(服务器错误)】(HTTP协议版本)
- 能拯救你的人也只能是自己
- Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
- FLASH、SDRAM
- 16. Magento模板及布局文件中引用Static Block的方法
- USB-AUDIO初步分析
- 联想G480黑苹果安装成功
- 美式英语 [t] 的发音
- 移动硬盘打不开,千万别轻易格式化
- 图形验证码 java
- php实训参考文献,SPSS实训心得体会
- 苹果手机充电口接触不良怎么办_手机充电插口松动!声音变小!手机死机!怎么办?...
- 新建gitlab分支
- 我的showkey 刷挂了。
- CSS常用英文字体介绍
- JDT AST学习笔记
- Pytorch Illegal instruction 解决(鸵鸟战术)