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文档内容编辑与保存相关推荐

  1. java中operationBox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存

    pdfbox开发包下载地址:http://pdfbox.apache.org/ 程序实现了PDF文档的创建,读入,与修改PDF内容并保存. 可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究 ...

  2. java pdfbox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存

    pdfbox开发包下载地址:http://pdfbox.apache.org/ 程序实现了PDF文档的创建,读入,与修改PDF内容并保存. 可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究 ...

  3. IText实现对PDF文档属性的基本设置

    一.Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  4. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  5. java加密解密 pdf_Java 加密和解密PDF文档

    前言 在日常办公时,为了保护文档不被他人篡改,我们可为文档设置打开口令,即加密.同时,因需要我们也可对加密文档进行解密,以便能够查看和编辑文档.本文将通过Java程序来演示如何对PDF文档进行加密和解 ...

  6. 使用HttpHandler解析并展示PDF文档内容

    前言 如果我们想将服务端的PDF文档内容展示给客户端,往往会通过URL直接访问的方式.这样一来,PDF文档就会毫无保留的保存到客户端去,通过浏览器的PDF插件,客户端可以随意拷贝PDF的副本.(如下图 ...

  7. HttpHandler解析并展示PDF文档内容

    2019独角兽企业重金招聘Python工程师标准>>> HttpHandler 解析并展示 PDF 文档内容 如果我们想将服务端的 PDF 文档内容展示给客户端,往往会通过 URL ...

  8. 【解密】PDF文档忘记编辑密码 照样编辑

    本文目录 方式一.打开网站,解除限制 方式二.使用 " PDF 补丁丁 " 软件 在文档编辑过程中,为了防止别人修改我们的文档,常常会给文档设置限制编辑的密码.不过有时也会&quo ...

  9. Pdf文档在线编辑控件源码及演示

    支持Pdf文档在线编辑,并可以进行另存管理. PdfTestSite为演示文件夹 PdfViewer为控件源码控件 test.pdf为模版文件 注意:服务器端需要安装Adobe Reader以便进行更 ...

最新文章

  1. 双非高校浙工大,一年2项研究上Nature,校友纷纷打Call:欠一个211名头
  2. 笔试真题及其答案解析:国内各大银行计算机方向笔试之计算机基础知识—选择题120题
  3. 【笔记】python os的使用 文件批量重命名 批量移动文件 将png转jpg代码
  4. 错误代码大全【100(临时响应)】【200(成功)】【300(已重定向)】【400(请求错误)】【500(服务器错误)】(HTTP协议版本)
  5. 能拯救你的人也只能是自己
  6. Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
  7. FLASH、SDRAM
  8. 16. Magento模板及布局文件中引用Static Block的方法
  9. USB-AUDIO初步分析
  10. 联想G480黑苹果安装成功
  11. 美式英语 [t] 的发音
  12. 移动硬盘打不开,千万别轻易格式化
  13. 图形验证码 java
  14. php实训参考文献,SPSS实训心得体会
  15. 苹果手机充电口接触不良怎么办_手机充电插口松动!声音变小!手机死机!怎么办?...
  16. 新建gitlab分支
  17. 我的showkey 刷挂了。
  18. CSS常用英文字体介绍
  19. JDT AST学习笔记
  20. Pytorch Illegal instruction 解决(鸵鸟战术)

热门文章

  1. Typora最好用的Markdown编辑器
  2. 2021-03-09 Matlab RBF神经网络及其实例
  3. android bitmap 占用内存大小,drawable与bitmap内存占用大小
  4. wget ip_10分钟搭建个人开源博客+域名ip解析
  5. 计算机组成原理码质变换,计算机组成原理负数的8421码
  6. 1.大数据处理架构Hadoop
  7. IntelliJ IDEA导航特性Top20
  8. Java功底之static、final、this、super
  9. 【前端开发系列】—— 利用选择器添加内容
  10. Python numpy生成矩阵、串联矩阵