Java使用itextpdf导出PDF文件

更新时间:2023-08-01 22:19:46 阅读: 评论:0

Java使⽤itextpdf导出PDF⽂件
2.接下来,让我们先列出⼏个接下来例⼦中要⽤到的重要的类,熟悉熟悉。
1. Document:这是iText库中最常⽤的类,它代表了⼀个pdf实例。如果你需要从零开始⽣成⼀个PDF⽂件,你需要使⽤这个Document类。⾸先创建(new)该实例,然后打开(open)它,并添加(add)内容,最后关闭(clo)该实例,即可⽣成⼀个pdf⽂件。
2. Paragraph:表⽰⼀个缩进的⽂本段落,在段落中,你可以设置对齐⽅式,缩进,段落前后间隔等。
3. Chapter:表⽰PDF的⼀个章节,他通过⼀个Paragraph类型的标题和整形章数创建。
4. Font:这个类包含了所有规范好的字体,包括family of font,⼤⼩,样式和颜⾊,所有这些字体都被声明为静态常量。 List:表⽰⼀个列表。
5. pdf.PDFPTable:表⽰⼀个表格。
6. Anchor:表⽰⼀个锚,类似于HTML页⾯的链接。
7. pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写⼊到与⽂件或⽹络关联的输出流中。
8. pdf.PdfReader:⽤于读取PDF⽂件。
⼀.配置pom
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.0.6</version>
</dependency>
⼆.PDFUtil.java⼯具类
/*字体SIMHEI.TTF来⾃于windows系统(C:\Windows\Fonts)
*直接复制过来放到src下的pdfFont⽂件夹⾥
*通过相对路径进⾏加载
*/
public static final Rectangle PAGE_SIZE = PageSize.A4;//纸张规格
public static final float MARGIN_LEFT = 50;//左边距
public static final float MARGIN_RIGHT = 50;//右边距
public static final float MARGIN_TOP = 50;//上边距
public static final float MARGIN_BOTTOM = 50;//底部边距
public static final float SPACING = 20;//⾏间距
public static final String ClASS_HOURS_PDF_FOLDER="学时笔记";
public static final String COURSE_PDF_FOLDER="课程学时笔记";
private Document document = null;
/
**
* 创建导出数据的⽬标⽂档
*
* @param fileName 存储⽂件的临时路径
* @return
* @return
* @throws IOException
*/
public String createDocument(HttpServletRequest request,
HttpServletRespon respon, String fileName)
throws IOException {
String pdfPath = Session().getServletContext().getRealPath(ClASS_HOURS_PDF_FOLDER);
// 如果⽂件夹不存在则创建⽂件夹
File folder = new File(pdfPath);
if (!ists()) {
folder.mkdirs();
}
String path = AbsolutePath();
// 存储⽂件
File file = new File(path, fileName);
File file = new File(path, fileName);
FileOutputStream out = null;
document = new Document(PAGE_SIZE, MARGIN_LEFT,MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
// 打开⽂档准备写⼊内容
document.open();
return pdfPath;
}
/**
* 打包时⽣成pdf
*
* <p>Title: createDocumentZip</p>
* <p>Description: </p>
* @time上午9:50:25
* @param request
* @param respon
* @param fileName
* @return
* @throws IOException
*/
public String createDocumentZip(HttpServletRequest request,
HttpServletRespon respon, String fileName)
throws IOException {
String pdfPath = Session().getServletContext().getRealPath(COURSE_PDF_FOLDER);
String PDF_SAVEPATH = pdfPath;
// 如果⽂件夹不存在则创建⽂件夹
File folder = new File(PDF_SAVEPATH);
if (!ists()) {
folder.mkdirs();
}
String path = AbsolutePath() + "/";
// 存储⽂件
File file = new File(path, fileName);
String filePath = pdfPath;
FileOutputStream out = null;
document = new Document(PAGE_SIZE, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
// 打开⽂档准备写⼊内容
document.open();
return filePath;
}
/
**
* 将章节写⼊到指定的PDF⽂档中
*
* @param chapter
* @return
*/
public void writeChapterToDoc(Chapter chapter) {
try {
try {
if (document != null) {
if (!document.isOpen())
document.open();
document.add(chapter);
}
} catch (DocumentException e) {
西数硬盘保修e.printStackTrace();
}
}
/**
* 最后关闭PDF⽂档
*
* <p>Title: cloDocument</p>
* <p>Description: </p>
* @time上午9:59:08
*/
旺旺狗public void cloDocument() {
if (document != null) {
document.clo();
}
}
/**
* 创建PDF⽂档中的章节
*
* @param title      章节标题
* @param chapterNum 章节序列号
* @param alignment  0表⽰align=left,1表⽰align=center
* @param numberDepth 章节是否带序号
* 设值=1 表⽰带序号
* 1.章节⼀;
* 1.1⼩节⼀...,
* 设值=0表⽰不带序号
* @param font 字体格式
* @return Chapter章节
*/
public static Chapter createChapter(String title, int chapterNum, int alignment, int numberDepth, Font font) {        Paragraph chapterTitle = new Paragraph(title, font);
chapterTitle.tAlignment(alignment);
Chapter chapter = new Chapter(chapterTitle, chapterNum);
chapter.tNumberDepth(numberDepth);
return chapter;
}
/**
* 创建某指定章节下的⼩节
*
* @param chapter 指定章节
* @param title  ⼩节标题
* @param font    字体格式英语所有格
* @param numberDepth ⼩节是否带序号
*                        设值=1 表⽰带序号
*                    1.章节⼀;
*                    1.1⼩节⼀...,
*                      设值=0表⽰不带序号
* @return
*        ction在指定章节后追加⼩节
*/
public static Section createSection(Chapter chapter, String title, Font font, int numberDepth) {
Section ction = null;
if (chapter != null) {
Paragraph ctionTitle = new Paragraph(title, font);
Paragraph ctionTitle = new Paragraph(title, font);
ctionTitle.tSpacingBefore(SPACING);
ction = chapter.addSection(ctionTitle);
ction.tNumberDepth(numberDepth);
}
return ction;
}
/**
* 向PDF⽂档中添加的内容
*
* @param text 内容
* @param font 内容对应的字体
* @return phra 指定字体格式的内容
*/
public static Phra createPhra(String text, Font font) {
Phra phra = new Paragraph(text, font);
return phra;
}
/**
* 创建列表
寂静之音
*
* @param numbered  设置为 true 表明想创建⼀个进⾏编号的列表廖隽嘉
* @param lettered  设置为true表⽰列表采⽤字母进⾏编号,为fal则⽤数字进⾏编号    * @param symbolIndent
* @return list
*/
public static List createList(boolean numbered, boolean lettered, float symbolIndent) {        List list = new List(numbered, lettered, symbolIndent);
return list;
}
/**
* 创建列表中的项
*
* @param content 列表项中的内容
* @param font 字体格式
* @return listItem
*/
public static ListItem createListItem(String content, Font font) {
ListItem listItem = new ListItem(content, font);
return listItem;
抹茶的功效}
/**
* 创造字体格式
*
* @param fontname
* @param size 字体⼤⼩
* @param style 字体风格
* @param color 字体颜⾊
* @return Font
*/
public static Font createFont(String fontname, float size, int style, BaColor color) {        Font font = Font(fontname, size, style, color);
矿质元素return font;
}
/**
* 返回⽀持中⽂的字体---常规⿊体
*
* @param size字体⼤⼩
* @param style字体风格
* @param color字体颜⾊
* @return字体格式
* @return字体格式
*              CHARACTOR_FONT_CH_BLACK设置字体为“常规⿊体”
*              BaFont.IDENTITY_H⽔平书写
*              BaFont.EMBEDDED字体嵌⼊
*/
public static Font createChineFont(float size, int style, BaColor color) {
BaFont bfChine = null;
try {
String CHARACTOR_FONT_CH_BLACK = Thread.currentThread().getContextClassLoader().getResource("").getPath();            String realReadPath = CHARACTOR_FONT_CH_BLACK + "SIMHEI.TTF";
bfChine = ateFont(realReadPath, BaFont.IDENTITY_H, BaFont.EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return new Font(bfChine, size, style, color);
}
/**
* 下载服务器下⽣成的⽂件
*
* <p>Title: download</p>
10月21日是什么星座* <p>Description: </p>
* @time下午2:51:34
* @param path
* @param respon
*/
public static void download(String path, HttpServletRespon respon) {
InputStream in = null;
OutputStream out = null;
try {
File file = new File(path);
/* 读取要下载的⽂件,保存到⽂件输⼊流 */
in = new FileInputStream(file);
/* 设置响应头,控制浏览器下载该⽂件 */
respon.tCharacterEncoding("UTF-8");
respon.tContentType("application/octet-stream");
respon.tHeader("Content-disposition",
"attachment; filename=" + new Name().getBytes("UTF-8"), "ISO8859-1"));
/* 创建缓冲输出流 */
out = new OutputStream());
/* 定义缓冲区⼤⼩,开始读写 */
byte buffer[] = new byte[2048];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
/* 刷新缓冲区,写出 */
out.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* 删除⽂件夹及其下⾯的所有⽂件
*
* <p>Title: deleteAll</p>
* <p>Description: </p>
* @time下午4:09:03
* @param file
*/
public static void deleteAll(File file) {

本文发布于:2023-08-01 22:19:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1104839.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字体   创建   内容   章节   格式   缓冲区   件夹   指定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图