看到同事做了一个导出pdf的功能,以前没接触过,记录一下留作后用。
项目使用了maven管理工具,pom文件加入相关依赖如下:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.3</version>
</dependency>
相关js如下:
function exportPDF() {
top.$.jBox.confirm("确认要导出用户数据吗?", "系统提示", function(v, h, f) {
if (v == "ok") {
var URL="${ctx}/employeemark/employeeMark/getPdf?id=${employeeMark.id}";
location.href=URL;
}
}, {
buttonsFocus : 1
});
top.$('.jbox-body .jbox-icon').css('top', '55px');
}
web层如下:
@RequestMapping(value = "getPdf")
public String getPdf(HttpServletRequest request,HttpServletResponse response, RedirectAttributes redirectAttributes) throws Exception {
String strId = request.getParameter("id");
if (strId != null && strId.length() > 0) {
EmployeeMark employeeMark = employeeMarkService.get(strId);
String date = DateUtil.dateToStrEn(new Date(), DateUtil.DEFAULT_PATTERN);
String filePath = Global.getAdminPath()+"/tempFile";
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
String inPutPath = filePath+"/tempPDF"+System.currentTimeMillis()+".pdf";
String outPutPath = filePath+"/PDFWater"+System.currentTimeMillis()+".pdf";
File exportFile = new File(inPutPath);
exportFile.createNewFile();
System.err.println(exportFile);
PdfUtil p = new PdfUtil(exportFile);
//生成pdf临时文件 未添加水印
p.generatePDF(employeeMark);
//给pdf文件添加水印
String waterStr="保密保密";
PdfUtil.waterMark(inPutPath, outPutPath, waterStr);
//导出pdf文件
PdfUtil.exportPDF(request, response, outPutPath, employeeMark.getTitle(),inPutPath);
return null;
} else {
addMessage(redirectAttributes, "未获得当前记录的有效标识!");
}
return "redirect:" + Global.getAdminPath() + "/employeemark/employeeMark/form?id="+strId;
}
许多业务都是在until里面实现的,
import java.awt.FontMetrics;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
imp