java pdfbox_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();
}
}
java pdfbox_Java使用PDFBox开发包实现对PDF文档内容编辑与保存相关推荐
- Java使用PDFBox开发包实现对PDF文档内容编辑与保存
pdfbox开发包下载地址:http://pdfbox.apache.org/ 程序实现了PDF文档的创建,读入,与修改PDF内容并保存. 可能有个前提,PDF文档不是加密的,如果加密怎么办,我没研究 ...
- java中operationBox_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岗P5-P7成长笔记【3283页PDF文档】
又到了"金九银十"面试求职高峰期,在金三银四时也参与过不少面试,2020都说工作不好找,也是对开发人员的要求变高.前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成 ...
- 阿里Java岗P5-P7成长笔记【3283页PDF文档免费领】
又到了"金九银十"面试求职高峰期,在金三银四时也参与过不少面试,2020都说工作不好找,也是对开发人员的要求变高.前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成 ...
- python对word文档内容进行批量替换_python 使用win32com实现对word文档批量替换页眉页脚...
最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...
- java实现在pdf文档上填充内容
需求: 在合同附件模板上填充内容,生成一个新的合同附件,并可以查看合同附件 思路: 首先在模板文档上设置文本域,根据文本域填充内容,使用itextpdf在pdf上填充内容 1.在pom.xml中加入以 ...
- java加密文件夹_Java加密、解密PDF文档
import java.util.EnumSet; import com.spire.pdf.PdfDocument; import com.spire.pdf.security.PdfEncrypt ...
最新文章
- jsPlumb(3)-基本概念
- 推荐系统-07-lambda架构
- 初学C++正则表达式(regex)
- Linux重定向指令
- 【机房重构】一步一步往上爬——验收给了我什么
- Linux之Nginx配置解析PHP
- 使用Javap分析Java代码里的static final的工作原理
- 在linux上安装jdk(转载)
- Lintcode415-Valid Palindrome-Medium
- python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例
- 如何在Linux系统上刷抖音
- 固定旋转_扶手也要用大理石!石材旋转楼梯扶手的设计与安装
- UVA11729 Commando War【贪心】
- 汽车方向盘转角传感器
- 雷达多普勒频率计算公式_详细分析:合成孔径雷达成像技术
- 基于HTML5 Canvas 实现地铁站监控
- 大数据小项目之电视收视率企业项目07
- 什么是RPM安装???
- 计算机网络的对学生的利弊英语作文,网络的利与弊英语作文范文
- 2013年9—12月新托福考试终极报名指南!
热门文章
- 黑白子交换c语言思路,C趣味程序百例(28)黑白子交换
- 不是微型计算机工作环境,计算机应用基础知识试题及答案
- 什么是B+树?(详细图解)
- 全屏的实现(隐藏 StatusBar 或 NavigationBar)
- VC的调试中,AssertValid和Dump函数的应用(转)
- Ajax初步(小山)
- 自动控制原理简答题知识点
- Json hijacking/Json劫持漏洞
- 中国设备维修安装企业能力等级证书(制冷空调)
- 关于在laravel中上传7M的pdf文件被转为application/octet-stream的问题处理