Itext操作pdf模板生成pdf
2017-04-21 13:12
1131 查看
根据pdf模板导出pdf文件
设置pdf模板的表单域
如下代码:
package com.dogoserver.user.controller;import java.io.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.*;
@Controller
public class PdfDemoController {
@RequestMapping("/pdfDemo.do")
public void pdfDemo(HttpServletRequest request, HttpServletResponse response) throws Exception{
response.reset();
ByteArrayOutputStream ba = new ByteArrayOutputStream();
/* 打开已经定义好字段以后的pdf模板 */
String TemplatePDF = request.getSession().getServletContext().getRealPath("WEB-INF/pdf") + "/report.pdf";
System.out.println(TemplatePDF);
try {
PdfReader reader = new PdfReader(TemplatePDF);
/* 将要生成的目标PDF文件名称 */
PdfStamper stamp = new PdfStamper(reader, ba);
//PdfContentByte under = stamp.getUnderContent(1);
/* 使用中文字体 */
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bf, 12, Font.NORMAL);
/* 取出报表模板中的所有字段 */
AcroFields form = stamp.getAcroFields();
/* 为字段赋值,注意字段名称是区分大小写的 */
form.setField("name", "lixy");
/* 为字段赋值图片 */
insertImage(stamp, form);
stamp.setFormFlattening(true);
/* 必须要调用这个,否则文档不会生成的 */
stamp.close();
} catch (IOException e) {
e.printStackTrace();
System.err.println("A Document error:" + e.getMessage());
}
response.setContentType("application/pdf");
/* 如果想出来让IE提示你是打开还是保存的对话框,加上下面这句就可以了 */
response.setHeader("Content-disposition","attachment; filename=report.pdf" );
response.setContentLength(ba.size());
ServletOutputStream out = response.getOutputStream();
ba.writeTo(out);
out.flush();
out.close();
ba.close();
}
/**
* 插入图片
* @param ps
* @param s
* @throws Exception
*/
public static void insertImage(PdfStamper ps, AcroFields s) throws Exception {
/**
* 因为直接向域中插入图片没有直接的方法(也许有,但是可能我没有找到)
* 采用的是获取域的方式在指定位置插入表格
*/
//要插入图片的字段在第几页
PdfContentByte under = ps.getOverContent(5);
//获取字段的坐标
float[] fieldPosition = s.getFieldPositions("age");
float left = fieldPosition[1];
float right = fieldPosition[3];
float top = fieldPosition[4];
float bottom = fieldPosition[2];
System.out.println("left------->" + left);
System.out.println("right------->" + right);
System.out.println("top------->" + top);
System.out.println("bottom------->" + bottom);
//文件形式
Image image = Image.getInstance("D:/testImg.png");
//流形式
//byte[] bytes = toByteArray("D:/testImg.png");
//Image image = Image.getInstance(bytes);
//位置,大小自己进行调整
image.setAbsolutePosition(left, bottom);
image.scaleToFit(right-left, top-bottom);
under.addImage(image);
}
/**
* java 读取文件并转换为byte数组
* @param filePath
* @return
* @throws Exception
*/
public static byte[] toByteArray(String filePath) throws Exception{
InputStream in = new FileInputStream(filePath);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = 0;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
}
byte[] bytes = out.toByteArray();
return bytes;
}
}
导出pdf文件效果
相关文章推荐
- jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用
- itext pdf模板生成pdf
- java-pdf-itext7、itextpdf 生成pdf 文档,使用pdf模板生成(支持中文字体)
- java读取生成PDF,iText操作PDF
- iText7通过模板生成PDF
- Java中操作pdf模板生成pdf
- 利用Itext中table动态生成PDF模板
- Java Itext插件生成Pdf(一) 解析PDF模板生成PDF表单
- 通过Itext生成PDF实例-操作超全
- Java iText使用PDF模板生成PDF文档
- itext:根据模板生成新的pdf
- java运用itextpdf实现根据模板生成合同并返回网络路径,供用户查看
- Java IText使用PDF模板 生成 输出PDF
- 利用velocity模板以及itext生成pdf
- 【java】 iText使用PDF模板生成输出PDF
- Java IText使用PDF模板 生成 输出PDF
- Itext根据模板生成pdf文件并导出
- Freemarker+Flying sauser +Itext 利用ftl模板生成PDF打印预览
- Java中操作pdf模板生成pdf
- 用Adobe Acrobat DC快速生成合同模板、itext导出pdf,解决项目中合同问题