iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
下面简单的整理几个操作pdf相关实例。
1.PDF模版填充
首先需要有一个pdf文件作为模版,可以用如adobe acrobat等工具,添加几个文本域在pdf中,下面就是模版完成后的部分截图。
/**
* @throws IOException
* @throws DocumentException
*/
@SuppressWarnings("unchecked")
@Test
public void fillTemplate()
throws IOException, DocumentException {
PdfReader reader = new PdfReader(templateFile); // 模版文件目录
PdfStamper ps = new PdfStamper(reader, new FileOutputStream(
"f:/fillTemplate.pdf")); // 生成的输出流
// ByteArrayOutputStream bos = new ByteArrayOutputStream();
// PdfStamper ps = new PdfStamper(reader, bos);
AcroFields s = ps.getAcroFields();
Map<String, Object> fieldMap = s.getFields(); // pdf表单相关信息展示
for (Map.Entry<String, Object> entry : fieldMap.entrySet()) {
String name = entry.getKey(); // name就是pdf模版中各个文本域的名字
Item item = (Item) entry.getValue();
System.out.println("[name]:" + name + ", [value]: " + item);
}
s.setField("CUSTOMERNAME", "as该多好公司");
s.setField("TEL", "123456asdzxc");
s.setField("CONTACT", "我是联系人123");
ps.setFormFlattening(true); // 这句不能少
ps.close();
reader.close();
}
效果如下所示:
[name]:CUSTOMERNAME, [value]: com.lowagie.text.pdf.AcroFields$Item@1690726
[name]:CONTACT, [value]: com.lowagie.text.pdf.AcroFields$Item@5483cd
[name]:TEL, [value]: com.lowagie.text.pdf.AcroFields$Item@1befab0
输出的pdf文件内容:
注:默认情况下如果填充的字段值含中文时,将提示报错,这是因为没有IText相应的中文语言包,需要下载亚洲语言包,ITextAsian.jar。
如不想生成文件流(临时文件),可用ByteArrayOutputStream代替。
2.多个PDF合并
/**
* 多个PDF合并功能
*
* @param files
* 多个PDF的文件路径
* @param os
* 生成的输出流
*/
public static void mergePdfFiles(String[] files, OutputStream os) {
try {
Document document = new Document(
new PdfReader(files[0]).getPageSize(1));
PdfCopy copy = new PdfCopy(document, os);
document.open();
for (int i = 0; i < files.length; i++) {
PdfReader reader = new PdfReader(files[i]);
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
}
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
如果想要直接合并输出流,可以换成输出流的集合
/**
* 多个PDF合并功能
*
* @param osList
* @param os
*/
public static void mergePdfFiles(List<ByteArrayOutputStream> osList,
OutputStream os) {
try {
Document document = new Document(new PdfReader(osList.get(0)
.toByteArray()).getPageSize(1));
PdfCopy copy = new PdfCopy(document, os);
document.open();
for (int i = 0; i < osList.size(); i++) {
PdfReader reader = new PdfReader(osList.get(i).toByteArray());
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
}
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
3.PDF分割
/**
* 单个Pdf文件分割成N个文件
*
* @param filepath
* @param N
*/
public static void partitionPdfFile(String filepath, int N) {
Document document = null;
PdfCopy copy = null;
try {
PdfReader reader = new PdfReader(filepath);
int n = reader.getNumberOfPages();
if (n < N) {
System.out.println("The document does not have " + N
+ " pages to partition !");
return;
}
int size = n / N;
String staticpath = filepath.substring(0,
filepath.lastIndexOf("\\") + 1);
String savepath = null;
List<String> savepaths = new ArrayList<String>();
for (int i = 1; i <= N; i++) {
if (i < 10) {
savepath = filepath.substring(
filepath.lastIndexOf("\\") + 1,
filepath.length() - 4);
savepath = staticpath + savepath + "0" + i + ".pdf";
savepaths.add(savepath);
} else {
savepath = filepath.substring(
filepath.lastIndexOf("\\") + 1,
filepath.length() - 4);
savepath = staticpath + savepath + i + ".pdf";
savepaths.add(savepath);
}
}
for (int i = 0; i < N - 1; i++) {
document = new Document(reader.getPageSize(1));
copy = new PdfCopy(document, new FileOutputStream(
savepaths.get(i)));
document.open();
for (int j = size * i + 1; j <= size * (i + 1); j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
document.close();
}
document = new Document(reader.getPageSize(1));
copy = new PdfCopy(document, new FileOutputStream(
savepaths.get(N - 1)));
document.open();
for (int j = size * (N - 1) + 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
4.在Servlet中调用IText返回给客户端
a.将文件流直接返回给客户端
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("application/pdf");
ServletOutputStream sos = resp.getOutputStream();
FileInputStream in = new FileInputStream("f:/fillTemplate.pdf");
byte data[] = new byte[1024];
int len = 0;
while ((len = in.read(data)) != -1) {
sos.write(data, 0, len);
}
sos.flush();
in.close();
sos.close();
}
b.填充模版文件后将输出流返回给客户端
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("application/pdf");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfReader reader = null;
PdfStamper ps = null;
try {
reader = new PdfReader(""); // 模版文件目录
ps = new PdfStamper(reader, baos);
AcroFields s = ps.getAcroFields();
s.setField("CUSTOMERNAME", "as该多好公司");
s.setField("TEL", "123456asdzxc");
s.setField("CONTACT", "我是联系人123");
ps.setFormFlattening(true); // 这句不能少
ps.close();
reader.close();
} catch (DocumentException e) {
e.printStackTrace();
}
ServletOutputStream sos = resp.getOutputStream();
baos.writeTo(sos);
sos.flush();
sos.close();
}
- 大小: 5.7 KB
- 大小: 11.4 KB
分享到:
相关推荐
在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...
`iTextPDF.jar` 和 `Jsoup.jar` 都是这样的库,分别专注于PDF操作和网页解析。这两个库在开发过程中扮演着重要的角色,使得开发者能够方便地处理相关的任务。 首先,我们来看`iTextPDF.jar`。这是一个用于生成、...
iText是一款用于处理PDF、XML等格式文档的Java类库,同时也支持对DOCX文件进行读写操作。在本例中,虽然提到的是“itext”,但实际上可能是指iText的某个版本或分支,因为iText官方并不直接支持DOCX格式。不过,这里...
itext7的一些简单操作(二维码、水印、表格、HTML代码生成PDF) itext7解决中文显示问题有两种解决方式: 1 引入对应的语言包,火狐浏览器预览生成的pdf可能存在部分中文乱码问题,同时因为加载了语言包,生成的pdf更大 ...
总的来说,Java结合iText库可以方便地实现图片到PDF的转换,这是一个实用且常见的功能,尤其适合那些需要整理大量图像资料的场景。通过理解和掌握这些知识,你可以灵活地处理各种PDF相关的编程需求。
例如,清单中提到的CreateHsqldbTables.java、DatabaseConnection.java、HsqldbConnection.java以及MySqlConnection.java等文件名暗示了这些...,涉及在Java中通过iText操作数据库连接以及操作HSQLDB和MySQL数据库...
开发者可以根据项目需求选择合适的工具,例如,如果需要在服务器端进行大量PDF操作,那么使用PDFBox或iText这样的库会非常有用。同时,对于跨平台的字体渲染或简单的文件转换,XPDF和Poppler则提供了实用的命令行...
图片转PDF是常见的文件处理需求,特别是在文档整理和报告制作中。本压缩包中的"itextsharp.dll"是一个库文件,专门用于处理PDF操作,包括将图片转换成PDF。 iTextSharp是一个开源的.NET库,它是iText Java库的C#...
本话题聚焦于一个简单的Java本地工具,它提供了两个核心功能:PDF批量合并以及OFD批量转换为PDF。这个工具对于需要处理大量这类文件的用户来说,无疑是一个高效且实用的解决方案。 首先,我们来看PDF批量合并功能。...
PDFBinder V1.2提供了一个直观且易操作的界面,使得这一过程变得简单快捷。用户只需将需要合并的PDF文件拖放到程序界面上,软件就会自动按照添加的顺序进行合并。此外,该工具可能还支持自定义合并顺序,以便满足...
在Java编程环境中,将图片列表合并转换为PDF文档是一项常见的任务,特别是在报告生成、文档整理或数据可视化等场景。这个示例将详细讲解如何通过Java实现这一功能,包括必要的库引用、代码实现以及可能遇到的问题。 ...
本资料包“freemaker导出word的doc_docx_带动态图片及word转pdf工具类_jar_万能整理汇总rengm.zip”提供了关于如何使用Freemarker处理动态图片并转换Word为PDF的详细工具和教程。 首先,我们关注“doc_docx”部分。...
首先,`itextsharp.dll`是一个基于.NET Framework的PDF处理库,由iText公司开发。这个库提供了丰富的API,可以用于创建、修改和解析PDF文档。在PDF页面切割的场景下,我们可以使用iTextSharp库来读取PDF文件,选择要...
在使用Python或Java编程时,确实有许多库可以实现图片到PDF的转换,例如Python的PIL(Pillow)库和PyPDF2库,Java的Apache PDFBox和iText等。这些库提供了强大的功能,允许开发者自定义转换过程,但对非程序员来说,...
2. **PDF页面操作**:在拆分过程中,关键是要能够访问并操作PDF的页面。这可能包括提取单个页面、选择连续的页面范围或者根据某些条件(如标签、书签)来分割页面。 3. **PDF库与API**:为了实现这些功能,开发者...
在实际应用中,开发者需要理解Freemarker模板的语法,学会如何构建数据模型,以及如何使用提供的工具类来操作Word文档和转换PDF。通过这个资源,开发者可以大大简化生成复杂Word文档的工作流程,提高工作效率。
1. **iTextSharp.dll**:这是一个.NET框架下的PDF处理库,由iText公司开发,主要用于创建、修改和操作PDF文档。在这里,iTextSharp被用作生成PDF的基础工具,负责布局、样式和内容的输出。 2. **...
PDF格式扫描版,全书分为24章,共817页。2011年1月出版。 全书压缩打包成4部分,这是第3部分 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可...