1,先制作word文档;
2,把word文档转成pdf

3,打开pdf 在线制作工具
https://www.pdfescape.com/account/login/?des=o820D530C24C7B3BE275F55CD3A69266284C2D631093810DB
4,上传制作好的pdf 文件
5,给每个字段的对象属性赋字段值

6,在name 那里赋值就可以

7.pom.xml文件:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
8.工具类文件:
public void instanceEnded() throws Exception {
super.instanceEnded();
Map params = po.getParameters();
BtMettingsBeforeLogic logic = new BtMettingsBeforeLogic(dbc);
Map data = logic.view(params);
// 生成pdf并上传
//http://localhost:8086/mss_cw/core/system/control/CommonDownload.jsp?groupId=pdfId 访问路径
if(null != data){
byte[] bytes = new BtMettingsBeforePDFLogic(dbc).getPdfBytes(data, "btmeetingsbefore_template.pdf");
}
}
package mss.bt.bt005.component;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.zbiti.core.SystemManager;
import com.zbiti.core.components.BaseComponent;
import com.zbiti.core.util.db.DBConnection;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.Map;
public class BtMettingsBeforePDFLogic extends BaseComponent {
public BtMettingsBeforePDFLogic(DBConnection dbc) {
super(dbc);
}
/**
* 获取pdf模板路径
*
* @return
*/
private String getFilePath() {
String configPath = SystemManager.getConfigPath();
String filePath = configPath + "mss" + File.separator
+ "bt" + File.separator + "pdfTemplate" + File.separator;
return filePath;
}
/**
* 获取pdf内容
*
* @param data
* @param fileName
* @return
* @throws Exception
*/
public byte[] getPdfBytes(Map<String, String> data, String fileName) throws Exception {
// pdf模板所在路径
PdfReader reader = new PdfReader(this.getFilePath() + fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfStamper ps = new PdfStamper(reader, bos);
// 使用中文字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
fontList.add(bf);
AcroFields fields = ps.getAcroFields();
fields.setSubstitutionFonts(fontList);
fillData(fields, data);
//必须要调用这个,否则文档不会生成的
ps.setFormFlattening(true);
ps.close();
byte[] bytes = bos.toByteArray();
bos.close();
reader.close();
return bytes;
}
/**
* 填充模板中的数据
*/
private void fillData(AcroFields fields, Map<String, String> data) {
try {
for (String key : data.keySet()) {
String value = data.get(key);
// 为字段赋值,注意字段名称是区分大小写的
fields.setField(key, value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
网友评论