怎么用java动态生成pdf文档

如题所述

Flying-Saucer + iText + Velocity
1. 第一步
将jar包放到你的工程里,需要的jar如下:
bcprov-jdk15-140.jar
core-renderer.jar
iText-2.0.8.jar
iTextAsian.jar
velocity-1.4.jar
Jar包下载地址:http://code.google.com/p/flying-saucer/downloads/list
2. 第二步
设计模版,进行排版调整样式,css样式也可以导入@import 等,通过Velocity模版引擎动态替换 页面内容,以下是模版内容:
<?xml version="1.0" encoding="UTF-8" ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>PDF模版</title>
<style type="text/css">
<!--
body {
font: 100% Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.oneColLiqCtrHdr #container {
width: 100%;
margin: 0 auto;
text-align: left;
}
div.header-left {display: none}
div.header-right {display: none}
div.footer-left {display: none}
div.footer-right {display: none}追答

@media print {
div.header-left {
display: block;
position: running(header-left);
}
div.header-right {
display: block;
position: running(header-right);
}
div.footer-left {
display: block;
position: running(footer-left);
}
div.footer-right {
display: block;
position: running(footer-right);
}
}
@page {
margin: 0.65in;
padding: 1em;
@top-left{
content:element(header-left);
};
@top-right {
content: element(header-right)
};
@bottom-left {
content: element(footer-left)
};
@bottom-right {
content: element(footer-right)
};
}
#pagenumber:before {
content: counter(page);
}
#pagecount:before {
content: counter(pages);
}
.tbClass {
width:100%;height:100%;
border-left:1px #000000 solid;
border-bottom:1px #000000 solid
}
.tbClass td {
border-top:1px #000000 solid;
border-right:1px #000000 solid
}
@page landscape{
size:841.9pt 595.3pt;
mso-page-orientation:landscape;
margin:89.85pt 72.0pt 89.85pt 72.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;
}
div.landscape{
page:landscape;
}
@page portrait{
size:595.3pt 841.9pt;
margin:36.0pt 36.0pt 36.0pt 36.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:16.3pt 0pt;
mso-layout-grid-char-alt:0;
}
div.portrait{
page:portrait;
}
-->


页眉左侧

页眉右侧

页脚左侧

页脚右侧

内容1

内容2

内容3 横向显示

ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/ARIALUNI.TTF",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//PDF页眉图片路径
renderer.getSharedContext().setBaseURL("file:"+sysurl+"\\images\\a.gif");
renderer.layout();
renderer.createPDF(output);
output.close();
PdfReader reader = new PdfReader(outFile_url_);
// 加水印后PDF文件输出路径
String filePath_stamper = sysurl + "\\pdf\\doc\\my.pdf";
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filePath_stamper));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB- UCS2-H",BaseFont.NOT_EMBEDDED);
int total = reader.getNumberOfPages() + 1;
//水印图片的路径
String imageFilePath = sysurl + "\\images\\b.gif";
Image image = Image.getInstance(imageFilePath);
image.setAbsolutePosition(20, 50);
image.scalePercent(50);
PdfContentByte under;
for (int i = 1; i < total; i++) {
under = stamper.getUnderContent(i);
under.addImage(image);
under.beginText();
under.setColorFill(Color.CYAN);
under.setFontAndSize(base, 30);
under.endText();
}
stamper.close();}
}
5、生成PDF完成

温馨提示:答案为网友推荐,仅供参考