关于itext生成pdf的新的demo(包含简单的提取txt文件的内容 和xml内容转化为pdf)
一.用的iText版本为7.0.2版本,maven的配置如下:
<dependencies>
<!-- always needed -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.3</version>
</dependency>
<!-- always needed -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.3</version>
</dependency>
<!-- always needed -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for forms -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for PDF/A -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for digital signatures -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>sign</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for barcodes -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>barcodes</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for Asian fonts -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.0.3</version>
</dependency>
<!-- only needed for hyphenation -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>hyph</artifactId>
<version>7.0.3</version>
</dependency>
</dependencies>
二.以下就是本次更新的demo代码
package com.cn.shupu.util; import java.awt.Font;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;
import org.apache.poi.hslf.model.textproperties.TextAlignmentProp;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import com.itextpdf.io.codec.Base64;
import com.itextpdf.io.font.FontProgram;
import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.font.otf.Glyph;
import com.itextpdf.io.util.DecimalFormatUtil;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.draw.ILineDrawer;
import com.itextpdf.kernel.pdf.filespec.PdfDictionaryFS;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Tab;
import com.itextpdf.layout.element.TabStop;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.font.FontFamilySplitter;
import com.itextpdf.layout.font.FontSelector;
import com.itextpdf.layout.font.FontSet;
import com.itextpdf.layout.property.TabAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException; public class ItextForPDF { public static final String FONT = "C:\\Windows\\Fonts\\simsun.ttc,1";// 利用windows自带的字体,对中文和特殊字符处理
static DecimalFormat df = new DecimalFormat(); public static OutputStream createFile(String fileName) { File file = new File(fileName); if (!new File(file.getParent()).exists()) new File(file.getParent()).mkdirs(); try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} OutputStream os = null;
try {
os = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return os; } public static void txtToPdf(String txtPath, String pdfPath) { PdfWriter writer = new PdfWriter(createFile(pdfPath));
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = PageSize.A4;
// 中文处理和特殊字符处理
PdfFont font = null;
try {
font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H, false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Document document = new Document(pdf, pageSize); BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(txtPath), "GBK"));
String line = null;
while ((line = br.readLine()) != null) { Text text = new Text(line.trim());
Paragraph p = new Paragraph("\n").setFont(font).setFontSize(10f);
p.add(text);
document.add(p); } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { if (document != null) {
document.close();
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (pdf != null) {
pdf.close();
}
}
} } public static void xmlToPDF(String xmlPath, String pdfPath) { PdfWriter writer = new PdfWriter(createFile(pdfPath));
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = PageSize.A4;
// 中文处理和特殊字符处理
PdfFont font = null;
try {
font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H, false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Document document = new Document(pdf, pageSize); BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(xmlPath), "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) { Text text = new Text(line.trim());
Paragraph p = new Paragraph("\n").setFont(font).setFontSize(10f);
p.add(text);
document.add(p); } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { if (document != null) {
document.close();
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (pdf != null) {
pdf.close();
}
}
}
} public static void wordToPdf(String wordPath,String pdfPath){ PdfWriter writer = new PdfWriter(createFile(pdfPath));
PdfDocument pdf = new PdfDocument(writer);
PageSize pageSize = PageSize.A4;
// 中文处理和特殊字符处理
PdfFont font = null;
try {
font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H, false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} Document document = new Document(pdf, pageSize); BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(wordPath), "GBK"));
String line = null;
while ((line = br.readLine()) != null) { Text text = new Text(line.trim());
Paragraph p = new Paragraph("\n").setFont(font).setFontSize(10f);
p.add(text);
document.add(p); } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { if (document != null) {
document.close();
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (pdf != null) {
pdf.close();
}
}
}
}
三.关于对于中文的处理:
1.对于中文的处理需要我添加一个itext-asian-5.2.0.jar包,可以对中文进行处理。而你可能下载不能是这个版本,可能会引起错误的。
一下是对之前版本的处理:
假如你加入的iTextAsian.jar的版本为5.0.6;会 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'
我使用的是iText 5.0.6 加入了iTextAsian.jar就报错.
com.itextpdf.text.DocumentException: Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized.
参考博客:x
找的原因和解决方法:
原因:iText5以上就改了命名空间了.是 com/itextpdf/text/pdf/fonts/
但是iTextAsian还没有改.他的命名空间是 com/lowagie /text/pdf/fonts/
所以报错..
解决方法.:
1.用winrar解压iTextAsian.jar
2. 将com文件夹下面的lowagie 修改为itextpdf .
3.进入cmd . 切换到iTextAsian目录.
4.执行命令 jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/*
5.将生成的iTextAsian.jar文件替换原来的.
问题解决.
//解决中文的代码:
PdfFont font = null;
try {
font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
以上我用Itext7对一小段文字是没有问题,但是当对一个txt文档进行转化时,系统就会报错,大概意思就是pdfFont为null之类的。(具体的报错信息不记得)
2.这次对iText7版本来说:中文处理就没有用到了第三方的jar包
public static final String FONT = "C:\\Windows\\Fonts\\simsun.ttc,1";// 利用windows自带的字体,对中文和特殊字符处理 这个是再类中定义的全局的字体路径
// 中文处理和特殊字符处理
PdfFont font = null;
try {
font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H, false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这个是iText7中不使用了itext-asian-5.2.0.jar之类的jar,而是可以加载第三方的字体库来支持中文字体的;
本人是刚出生的小猿,有什么不足之处,请大神提点.
关于itext生成pdf的新的demo(包含简单的提取txt文件的内容 和xml内容转化为pdf)的更多相关文章
- 【PDF】java使用Itext生成pdf文档--详解
[API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...
- java使用iText生成pdf表格
转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...
- Itext生成pdf文件
来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...
- 【Java】使用iText生成PDF文件
iText介绍 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- 利用itext生成pdf的简单例子
一.itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- 在linux环境下使用itext生成pdf
转载请注明出处 https://www.cnblogs.com/majianming/p/9537173.html 项目中需要对订单生成pdf文件,在不断的尝试之后,终于生成了比较满意的pdf文档. ...
- Java Itext 生成PDF文件
利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...
- 用itext生成PDF报错:Font 'STSong-Light1' with 'UniGB-UCS2-H' is not recognized.
用itext生成PDF报错,加上try catch捕获到异常是 BaseFont bFont = BaseFont.createFont("STSong-Light1", &quo ...
- IText 生成简单表格(报表)doc文档 单元居中
IText生成doc文档需要三个包:iTextAsian.jar,iText-rtf-2.1.4.jar,iText-2.1.4.jar 亲测无误,代码如下所示: import com.lowagie ...
随机推荐
- Oracle数据库管理----性能优化
https://blog.csdn.net/yzllz001/article/details/54848513 数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找 ...
- TPS54331 TPS54332 3.5V to 28V Input, 3A, 570kHz Step-Down Converter with Eco-mode
The TPS54331 is a 28-V, 3-A non-synchronous buck converter that integrates a low RDS(on) high side M ...
- bind 笔记
BIND 的安装和配置: dns 服务,程序包名为bind ,程序名称为named 只需要安装 bind ,bind-libs ,bind-utils 生产环境全部安装 bind 服务脚本 :/etc ...
- SublimeText3安装Highlight插件
本来机子上装的是版本3,试了试网上的教程,比如这个:http://qq920924960.blog.163.com/blog/static/221611034201411247318866/ 结果都不 ...
- const与volatile
C或者C++基本上是按照从上到下.从左至右的顺序来读.但对于指针声明从某种意义上来讲是倒着的. C或者C++中每个声明都由两部分组成:零个或者多个声明说明符,一个或者多个用逗号隔开的声明符. cons ...
- 复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第六大题解答
六.(本题10分) 设 $A$ 为 $n$ 阶半正定实对称阵, $S$ 为 $n$ 阶实反对称阵, 满足 $AS+SA=0$. 证明: $|A+S|>0$ 的充要条件是 $r(A)+r(S)= ...
- Python3 tkinter基础 Radiobutton indicatoron 长条形 pack 充满一行
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Learning-Python【32】:进程理论基础
什么是进程 进程就是一个程序在一个数据集上的一次动态执行过程.是用来描述程序执行过程的虚拟概念.进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的.进程一般由 ...
- 5_bash
bash及其特性:shell:外壳.用户直接接入计算机的时候所使用的外壳程序linux允许一个用户账户登录多次,而这多次登录的每一个打开的shell都是独立的互不相干的shell,它们是三个进程,每一 ...
- 获取动态代理生成的.class文件
生成代理类,并写入硬盘:配置系统属性sun.misc.ProxyGenerator.saveGeneratedFile为true,代理类生成时将自动将生成的代理类写入硬盘 ? 1 2 3 4 5 6 ...