Java 动态生成 PDF 文件
每片文章前来首小诗:
需求:
项目里面有需要java动态生成 PDF 文件,提供下载。今天我找了下有关了,系统得学习了解下。
开源的 iText 库使得 PDF 的创建变得轻松易行。下面介绍下
方案:
-----------------------
iText V5.X.X 版
-----------------------
第一步学习:
了解下:
- com.itextpdf.text.Document 是用于生成 PDF 文档的主要类。
- com.itextpdf.text.pdf.PdfWriter 是一个 PDF 编写器。
- 下面罗列下常用:
- com.itextpdf.text.Paragraph:此类表示一个缩进的段落。
- com.itextpdf.text.Chapter:此类表示 PDF 文档中的一章。使用
Paragraph作为标题、int作为章节编号来创建该类。 - com.itextpdf.text.Font:此类包含一种字体的所有规范,比如字体集、字号、样式和颜色。各种字体都在此类中声明为静态常量。
- com.itextpdf.text.List:此类表示一个列表,反过来,该列表又包含许多
ListItems。 - com.itextpdf.text.pdf.PDFPTable:这是一个表格,可放在一个绝对位置上,也可作为类 Table 添加到文档中。
- com.itextpdf.text.Anchor:一个 Anchor 可能是一个引用,或是一个引用的目标。
这里我用的是这两个包,我分享下。
链接: http://pan.baidu.com/s/1koKaq 密码:q2vy
清单1. 实例化文档对象
Document document = new Document(PageSize.A4, , , , );
第 一个参数是页面大小。接下来的几个参数分别是左边距、右边距、上边距和下边距。此文档的类型还未定义。它依赖于您创建的编写器类型。对于我们的样例,我们 选择 com.itextpdf.text.pdf.PdfWriter。其他编写器包括 HtmlWriter、RtfWriter、XmlWriter 等。它们的名称说明了它们的实际用途。
清单2. 创建 PdfWriter 对象
PdfWriter writer = PdfWriter.getInstance(document, \
new FileOutputStream("C:\\Test.pdf"));
document.open();
第一个参数是文档对象的引用,第二个参数是输出将写入的文件的绝对名称。接下来,我们打开文档开始编写。
现 在,我们将在文档的第一页上添加一些文本。任何文本都借助 com.itextpdf.text.Paragraph 来进行添加。您可使用您的文本以及字体、颜色、字号等默认设置创建一个默认段落。否则,您可提供自己的字体。 在本文中,我们还将讨论 PDF 文档的定位符(链接)。在此 PDF 中,我们使用 backToTop 作为链接。当单击 backToTop 链接时,它会将您带到文档的第一页。您需要将该文本设置为第一页的定位目标。让我们看看如何将定位目标和字体设置到所添加的段落中。
清单3. 创建段落对象
Anchor anchorTarget = new Anchor("ccccccccccccccccc");
anchorTarget.setName("bbbbbbbbbbbbbbbb");
Paragraph paragraph1 = new Paragraph();
paragraph1.setSpacingBefore();
paragraph1.add(anchorTarget);
document.add(paragraph1);
document.add(new Paragraph("aaaaaaaaaaaaaaaaaaaaaa",
FontFactory.getFont(FontFactory.COURIER, , Font.BOLD, new CMYKColor(, , , ))));
显示了清单 3 中的代码的样例输出。要关闭文档,将 document.close(); 添加到清单 3 中的代码末尾。
这就是一个简单的pdf 生成了。
第二步学习:
细心的同学们,详细可以看帮助文档。
链接: http://pan.baidu.com/s/15n2BX 密码:kary
第三步学习:
再细心的同学,会问“干嘛用 aaaaaa bbbbbb cccccc”。中文呢?
这时候我们,需要解决。用帮助jar。我上面给你们分享了。
下面给个案例(超级简单)。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter; public class makePDF { /**
* @param args
* @throws DocumentException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException,
DocumentException {
// TODO Auto-generated method stub
Document document = new Document(PageSize.A4, , , , );// 是用于生成
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("D:\\pdftest.pdf"));
document.open();
Paragraph par = new PDFParagraph("你好");// 此类表示段落。
par.add("这是我们第一个pdftext。");
document.add(par);
document.close();
} } class PDFParagraph extends Paragraph {
/**
*
*/
private static final long serialVersionUID = 1L; public PDFParagraph(String content) {
super(content, getChineseFont());
} private static final Font getChineseFont() { Font FontChinese = null;
try {
BaseFont bfChinese = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
FontChinese = new Font(bfChinese, , Font.NORMAL);
} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
return FontChinese;
}
}
下面仔细解释下:
Paragraph par = new PDFParagraph("你好");// 此类表示一个缩进的段落。
-->调用方法:
PDFParagraph(String content)
-->
super(content, getChineseFont());//实现父类,成功创造出我们需要的 段落。
-->
getChineseFont()//中文帮助jar帮我们解决,中文显示。 总结:
iText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。
快去使用下。
Java 动态生成 PDF 文件的更多相关文章
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- Java Itext 生成PDF文件
利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...
- java动态生成HTML文件
在eclipse中,用java动态生成html文件. //用于存储html字符串 StringBuilder stringHtml = new StringBuilder(); try{ //打开文件 ...
- django 动态生成PDF文件
可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...
- 第二章:视图层 - 10:动态生成PDF文件
可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...
- java根据pdf模版动态生成pdf
java根据pdf模版动态生成pdf package com.utils; import java.io.ByteArrayOutputStream; import java.io.File; imp ...
- JAVA生成PDF文件
生成PDF文件是主要应用的是ITEXT插件 import java.awt.Color; import java.io.File; import java.io.FileOutputStream; i ...
- java调用wkhtmltopdf生成pdf文件,美观,省事
最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...
- Java生成PDF文件(转)
原文地址:https://www.cnblogs.com/shuilangyizu/p/5760928.html 一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iT ...
随机推荐
- 解决IE浏览器缓存导致AJAX请求数据异常
IE10浏览器会把AJAX请求的数据都缓存下来,然后每次想去刷新数据时发现数据都是一样的,于是导致数据显示异常. 解决方法: 在页面<head>标签里,加上以下声明: <!-- 解决 ...
- Redhat学习(此为草稿,正式笔记之后存放)
系统组成 版本XX.XX.XX XX主版本,XX副版本(奇数为测试版,偶数为稳定版),修订版本号 , 表示修改的次数(debug) linux主流分支 硬盘分区 /dev/ 硬件设备所在分区 hd 表 ...
- centos 搭建git 服务器
安装 git yum -y install git 添加git 用户 adduser git 切换到git 用户 su git 在git用户家目录下创建 .ssh文件夹 mkdir .ssh 修改文 ...
- 彻底关闭win10后台同步数据(转自技术社区)
设置隐私里面关闭所有同步数据选项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\将下面子项属性修改 OneSyncSvc的start属相修改 ...
- (转载)new Thread的弊端及Java四种线程池的使用
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new ...
- Ural 1039 Anniversary Party
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1039 Dynamic Programming. 建立树形结构,每个employee有两个 ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ...
- C#当中的扩展方法
先说有用的,c#扩展方法结论: 扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型.扩展方法必须是静态方法,可以像实例方法一样进行调用.且调用同名中实际定义的 ...
- SAS对数据变量的处理
SAS对数据变量的处理 在使用DATA步基于已经存在的数据集生成新数据集时,可以指定在新数据集中不需要包含的变量而仅读取其他变量,或者指定仅需要在 新数据集中包含的变量.该功能可以通过DATA步中的S ...
- 73.解决Xcode10 library not found for -lstdc++ 找不到问题
Xcode10 彻底废除了libstdc++,相关文件libstdc++.6.0.9.dylib.libstdc++.6.dylib.libstdc++.dylib.libstdc++.6.0.9.t ...