调用:
导出 export-pdf-20141023135557的压缩包,包含PDF文件
多个服务内容在一个Service specification.pdf中
@RequestMapping(value = "esbService/exportPdf.do", method = RequestMethod.GET) @ResponseBody public void exportPdf(@RequestParam String srvIds, HttpServletResponse response){ //logger.debug("exportPdf begin .."); //logger.debug("srvIds : " + srvIds); if(StringUtils.isNotBlank(srvIds)){ List<Long> srvIdList = new ArrayList<Long>(); String[] srvIdArr = srvIds.split(","); for(String ids : srvIdArr){ Long id = null; try{ id = Long.parseLong(ids); }catch(Exception e){ logger.error("parse param error .." + e.getMessage()); continue; } srvIdList.add(id); } //logger.debug("parse param pass .."); List<EsbServiceV> srvList = esbServiceVDS.getServiceList(srvIdList); // httpheader设置 // 导出 export-pdf-20141023135557的压缩包,包含PDF文件 response.setContentType("application/x-msdownload;"); response.setHeader("Content-disposition", "attachment; filename = export-pdf-" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", timestamp) + ".zip"); /*若导出PDF response.setContentType("application/pdf"); response.setHeader("Content-disposition", "attachment; filename=export-pdf-" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", System.currentTimeMillis()) + ".pdf");*/ Map<String, InputStream> in = new HashMap<String, InputStream>(); try { byte[] out = esbPdfDownload.exportPdf(srvList); InputStream datas = new ByteArrayInputStream(out); in.put("Service specification.pdf", datas); } catch (Exception e1) { e1.printStackTrace(); } //logger.debug("zip file param : " + in); //logger.debug("compress file begin .."); try { CompressionUtil.zip2(in, response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } //logger.debug("compress file end .."); } //logger.debug("exportPdf end .."); }
MAVEN POM:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
参考:
Java导出pdf (iText.jar)
http://sishuok.com/forum/blogPost/list/4378.html
http://90songjian.blog.51cto.com/2264714/649602
http://blog.csdn.net/uniorg/article/details/2219137
http://hintcnuie.iteye.com/blog/183690
http://quicker.iteye.com/blog/548805
工具类:
import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import javax.swing.JTextField; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; @Service("iEsbPdfDownload") public class EsbPdfDownloadDS implements IEsbPdfDownload { private static final Logger logger = LoggerFactory.getLogger(EsbPdfDownloadDS.class); @Autowired private IEsbServiceParaDao esbServiceParaDao; private Document doc = null; private String indentation = " "; private BaseFont bfChinese = null; private Font fontChinese = null; private Font title = null; private Font title1 = null; private Font tableTitle = null; private Font tableFont = null; private Font tableEn = null; private float[] relativeWidths = null; private float[] relativeOutputWidths = null; private float[] baseSrvWidths = null; private ByteArrayOutputStream byteArray = null; private PdfPTable t1 = null; /*程序入口:*/ @Override public byte[] exportPdf(EsbServiceV srv) throws Exception{ writePdfHeader(srv.getServiceNameEn()); //doc.add(new Paragraph("Hello World, Hello iText")); writeBaseInfo(srv);// 写入基本信息 // 写输入信息 writeInputMes(srv); // 写输出信息 writeOutPut(srv); doc.close(); //byteArray.writeTo(response.getOutputStream()); //response.getOutputStream().flush(); return byteArray.toByteArray(); } /** * 写文件头 方法名称:writePdfHeader 功能描述: * * @throws Exception */ private void writePdfHeader(String srvName) throws Exception { logger.debug("writePdfHeader begin .."); byteArray = new ByteArrayOutputStream(); doc = new Document(PageSize.A4, 36, 36, 50, 50); relativeWidths = new float[] { 6f, 25f, 25f, 18f, 6f, 20f };// 设置表格宽度 relativeOutputWidths = new float[] { 6f, 25f, 25f, 18f, 26f };// 设置表格宽度 baseSrvWidths = new float[]{25f,75f}; PdfWriter.getInstance(doc, byteArray);// 打开监听 doc.open(); doc.addTitle(srvName); // 设置中文字体 bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); fontChinese = new Font(bfChinese, 11, Font.NORMAL, BaseColor.BLACK); title = new Font(bfChinese, 15, Font.BOLD, BaseColor.BLACK); title1 = new Font(bfChinese, 10, Font.BOLD, BaseColor.BLACK); tableTitle = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLACK); tableFont = new Font(bfChinese, 10, Font.NORMAL, BaseColor.BLACK); tableEn = new Font(); tableEn.setSize(9); logger.debug("writePdfHeader end .."); } /** * 写输出参数信息 方法名称:writeOutPut 功能描述: * * @param es * @throws Exception */ private void writeOutPut(EsbServiceV v) throws Exception { doc.add(new Paragraph("2.输出", tableFont)); // doc.add(new Paragraph(" ")); t1 = getOutputTableHerder(""); int i = 1; List<EsbServiceParameter> dataObject1 = new ArrayList<EsbServiceParameter>(); List<EsbServiceParameter> outList = getEsbServiceParameter("PARAMETER_OUTPUT", v.getId(), -1L); for (EsbServiceParameter sp : outList) { if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) { dataObject1.add(sp); } writeOutputBody(sp, t1, i); i++; } // 如果没有参数,输出“无” if (null != outList && outList.size() > 0) { doc.add(new Paragraph(" ")); doc.add(t1); } else { doc.add(new Paragraph(indentation + indentation + "无", fontChinese)); } while (dataObject1.size() > 0) { i = 1; List<EsbServiceParameter> temp = new ArrayList<EsbServiceParameter>(); EsbServiceParameter p = dataObject1.get(0); String title = p.getParameterNameCh().equals(p.getParameterNameEn()) ? p.getParameterNameEn() : p.getParameterNameCh() + "(" + p.getParameterNameEn() + ")"; PdfPTable t = getOutputTableHerder(title); List<EsbServiceParameter> inListNode1 = getEsbServiceParameter("PARAMETER_OUTPUT", v.getId(), p.getId()); for (EsbServiceParameter sp : inListNode1) { if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) { temp.add(sp); } writeOutputBody(sp, t, i); i++; } doc.add(t); dataObject1.remove(0); // 调整输出顺序 for (EsbServiceParameter sp : dataObject1) { temp.add(sp); } dataObject1 = temp; } } private PdfPTable getOutputTableHerder(String mes) throws DocumentException { PdfPTable t1 = new PdfPTable(5); t1.setWidthPercentage(95f); t1.setWidths(relativeOutputWidths); // 设置标题信息 if (!"".equals(mes)) { Font ft = null; if(mes.indexOf("(") >= 0){ ft = tableTitle; }else{ ft = tableEn; } PdfPCell p = new PdfPCell(new Paragraph(mes, ft)); p.setColspan(5); p.setBorder(0); t1.addCell(p); } // ///////////表头 PdfPCell p1 = new PdfPCell(new Paragraph("序号", tableTitle)); p1.setBackgroundColor(BaseColor.GRAY); t1.addCell(p1); PdfPCell p3 = new PdfPCell(new Paragraph("字段名称", tableTitle)); p3.setBackgroundColor(BaseColor.GRAY); t1.addCell(p3); PdfPCell p4 = new PdfPCell(new Paragraph("字段描述", tableTitle)); p4.setBackgroundColor(BaseColor.GRAY); t1.addCell(p4); PdfPCell p5 = new PdfPCell(new Paragraph("数据类型", tableTitle)); p5.setBackgroundColor(BaseColor.GRAY); t1.addCell(p5); PdfPCell p6 = new PdfPCell(new Paragraph("备注", tableTitle)); p6.setBackgroundColor(BaseColor.GRAY); t1.addCell(p6); return t1; } /** * 写输入参数 方法名称:writeInputMes 功能描述: * * @param es * @throws Exception */ private void writeInputMes(EsbServiceV srv) throws Exception { doc.add(new Paragraph("2.输入", tableFont)); // doc.add(new Paragraph(" ")); t1 = getInputTableHerder(""); // 获取输入参数,一级参数 int i = 1; List<EsbServiceParameter> dataObject = new ArrayList<EsbServiceParameter>(); List<EsbServiceParameter> inList = getEsbServiceParameter("PARAMETER_INPUT", srv.getId(), -1L); for (EsbServiceParameter sp : inList) { if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) { dataObject.add(sp); } writeInputBody(sp, t1, i); i++; } // 如果没有参数,输出“无” if (null != inList && inList.size() > 0) { doc.add(new Paragraph(" ")); doc.add(t1); } else { doc.add(new Paragraph("无", fontChinese)); } while (dataObject.size() > 0) { i = 1; List<EsbServiceParameter> temp = new ArrayList<EsbServiceParameter>(); EsbServiceParameter p = dataObject.get(0); String title = p.getParameterNameCh().equals(p.getParameterNameEn()) ? p.getParameterNameEn() : p.getParameterNameCh() + "(" + p.getParameterNameEn() + ")"; PdfPTable t = getInputTableHerder(title); List<EsbServiceParameter> inListNode = getEsbServiceParameter("PARAMETER_INPUT", srv.getId(), p.getId()); for (EsbServiceParameter sp : inListNode) { if (sp.getDataType().trim().equals("COLLECTION") || sp.getDataType().trim().equals("ENTITY")) { temp.add(sp); } writeInputBody(sp, t, i); i++; } doc.add(t); dataObject.remove(0); // 调整输出顺序 for (EsbServiceParameter sp : dataObject) { temp.add(sp); } dataObject = temp; } } private List<EsbServiceParameter> getEsbServiceParameter(String parameterType, Long srvId , Long parentParameterId) { List<EsbServiceParameter> list = new ArrayList<EsbServiceParameter>(); String hql = "from EsbServiceParameter o where o.serviceId = "+ srvId +" and o.parameterType = '"+parameterType+"' and o.parameterParentId = "+parentParameterId+" and o.enabledFlag='Y' order by o.id asc"; list = (List<EsbServiceParameter>) esbServiceParaDao.findByHql(hql); return list; } /** * 写表体 方法名称:writeBody 功能描述: * * @param sp * @param t1 * @param i * @throws DocumentException */ private void writeInputBody(EsbServiceParameter sp, PdfPTable t1, int i) throws DocumentException { t1.addCell(new Paragraph(i + ".", tableEn)); t1.addCell(new Paragraph(sp.getParameterNameEn(),tableEn)); String cn = sp.getParameterNameCh().trim(); if(cn.indexOf("_") >= 0 || "MsgHeader".equals(cn)){ t1.addCell(new Paragraph(cn, tableEn)); }else{ t1.addCell(new Paragraph(cn, tableFont)); } // t1.addCell(new Paragraph(sp.getParameterNameCh(), tableFont)); String cellText = getCellTextForDataType(sp); t1.addCell(new Paragraph(cellText, tableEn)); t1.addCell(new Paragraph(sp.getIsNullFlag(), tableFont)); t1.addCell(new Paragraph(sp.getConstraints(), tableFont)); // doc.add(t1); } /** * 写表体 方法名称:writeBody 功能描述: * * @param sp * @param t1 * @param i * @throws DocumentException */ private void writeOutputBody(EsbServiceParameter sp, PdfPTable t1, int i) throws DocumentException { t1.addCell(new Paragraph(i + ".", tableEn)); t1.addCell(new Paragraph(sp.getParameterNameEn(), tableEn)); String cn = sp.getParameterNameCh().trim(); if(cn.indexOf("_") >= 0 || "MsgHeader".equals(cn)){ t1.addCell(new Paragraph(cn, tableEn)); }else{ t1.addCell(new Paragraph(cn, tableFont)); } String cellText = getCellTextForDataType(sp); t1.addCell(new Paragraph(cellText, tableEn)); t1.addCell(new Paragraph(sp.getRemark(), tableFont)); // doc.add(t1); } private String getCellTextForDataType(EsbServiceParameter sp) { String cellText = ""; String dataType = sp.getDataType(); if (Constants.SRV_PARAM_DATA_TYPE_VARCHAR.equals(dataType) || Constants.SRV_PARAM_DATA_TYPE_VARCHAR2.equals(dataType)) { Long len = sp.getDataLength(); if (len != null) { cellText = dataType + "(" + len + ")"; } else { cellText = dataType; } return cellText; } cellText = dataType; return cellText; } private PdfPTable getInputTableHerder(String mes) throws DocumentException { PdfPTable t1 = new PdfPTable(6); t1.setWidthPercentage(95f); t1.setWidths(relativeWidths); // 设置标题信息 if (!"".equals(mes)) { Font ft = null; if(mes.indexOf("(") >= 0){ ft = tableTitle; }else{ ft = tableEn; } PdfPCell p = new PdfPCell(new Paragraph(mes, ft)); p.setColspan(6); p.setBorder(0); t1.addCell(p); } // ///////////表头 PdfPCell p1 = new PdfPCell(new Paragraph("序号", tableTitle)); p1.setBackgroundColor(BaseColor.GRAY); t1.addCell(p1); PdfPCell p3 = new PdfPCell(new Paragraph("字段名称", tableTitle)); p3.setBackgroundColor(BaseColor.GRAY); t1.addCell(p3); PdfPCell p4 = new PdfPCell(new Paragraph("字段描述", tableTitle)); p4.setBackgroundColor(BaseColor.GRAY); t1.addCell(p4); PdfPCell p5 = new PdfPCell(new Paragraph("数据类型", tableTitle)); p5.setBackgroundColor(BaseColor.GRAY); t1.addCell(p5); PdfPCell p2 = new PdfPCell(new Paragraph("要求", tableTitle)); p2.setBackgroundColor(BaseColor.GRAY); t1.addCell(p2); PdfPCell p6 = new PdfPCell(new Paragraph("字段约束", tableTitle)); p6.setBackgroundColor(BaseColor.GRAY); t1.addCell(p6); return t1; } public String setDefaultValue(String value){ if(StringUtils.isBlank(value)){ value = "无"; } return value; } /** * 写服务的基本信息 方法名称:writeBaseInfo 功能描述: 写服务的基本信息 * * @param es * @param i * @throws Exception */ private void writeBaseInfo(EsbServiceV srv) throws Exception { PdfPTable t1 = new PdfPTable(2); t1.setWidthPercentage(95f); t1.setWidths(baseSrvWidths); Paragraph pf = new Paragraph(); pf.setAlignment(Element.ALIGN_CENTER); pf.add(new Paragraph(srv.getServiceNameCN(), title)); PdfPCell name = new PdfPCell(pf); name.setColspan(2); name.setBorder(0); name.setHorizontalAlignment(JTextField.CENTER); t1.addCell(name); PdfPCell p1 = new PdfPCell(new Paragraph("1、服务信息", tableFont)); p1.setColspan(2); p1.setBorder(0); t1.addCell(p1); PdfPCell p11 = new PdfPCell(new Paragraph("服务标识", title1)); t1.addCell(p11); PdfPCell p12 = new PdfPCell(new Paragraph(srv.getServiceNumber(), tableEn)); t1.addCell(p12); PdfPCell p21 = new PdfPCell(new Paragraph("服务名称", title1)); t1.addCell(p21); PdfPCell p22 = new PdfPCell(new Paragraph(srv.getServiceNameCN() + "(" + srv.getServiceNameEn() + ")", tableFont)); t1.addCell(p22); PdfPCell p31 = new PdfPCell(new Paragraph("服务描述", title1)); t1.addCell(p31); PdfPCell p32 = new PdfPCell(new Paragraph(setDefaultValue(srv.getDescription()), tableFont)); t1.addCell(p32); PdfPCell p41 = new PdfPCell(new Paragraph("服务类型", title1)); t1.addCell(p41); PdfPCell p42 = new PdfPCell(new Paragraph(srv.getServiceTypeName(), tableFont)); t1.addCell(p42); PdfPCell p51 = new PdfPCell(new Paragraph("同步/异步方式", title1)); t1.addCell(p51); PdfPCell p52 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSynOrAsyncName()), tableFont)); t1.addCell(p52); PdfPCell p61 = new PdfPCell(new Paragraph("实现方式", title1)); t1.addCell(p61); PdfPCell p62 = new PdfPCell(new Paragraph(setDefaultValue(srv.getMethodName()), tableEn)); t1.addCell(p62); PdfPCell p71 = new PdfPCell(new Paragraph("业务场景说明", title1)); t1.addCell(p71); PdfPCell p72 = new PdfPCell(new Paragraph(setDefaultValue(srv.getApplicationSence()), tableFont)); t1.addCell(p72); PdfPCell p81 = new PdfPCell(new Paragraph("业务规则和逻辑", title1)); t1.addCell(p81); PdfPCell p82 = new PdfPCell(new Paragraph(setDefaultValue(srv.getBussnessLogic()), tableFont)); t1.addCell(p82); PdfPCell p91 = new PdfPCell(new Paragraph("出错和异常处理机制", title1)); t1.addCell(p91); PdfPCell p92 = new PdfPCell(new Paragraph(setDefaultValue(srv.getExceptionHandle()), tableFont)); t1.addCell(p92); PdfPCell p101 = new PdfPCell(new Paragraph("数据量", title1)); t1.addCell(p101); PdfPCell p102 = new PdfPCell(new Paragraph(setDefaultValue(srv.getDataLength()), tableFont)); t1.addCell(p102); PdfPCell p111 = new PdfPCell(new Paragraph("响应时间要求", title1)); t1.addCell(p111); PdfPCell p112 = new PdfPCell(new Paragraph(setDefaultValue(srv.getTimeResponse()), tableFont)); t1.addCell(p112); PdfPCell p121 = new PdfPCell(new Paragraph("服务安全和权限要求", title1)); t1.addCell(p121); PdfPCell p122 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSecurityPermission()), tableFont)); t1.addCell(p122); PdfPCell p131 = new PdfPCell(new Paragraph("使用建议", title1)); t1.addCell(p131); PdfPCell p132 = new PdfPCell(new Paragraph(setDefaultValue(srv.getSuggestion()), tableFont)); t1.addCell(p132); doc.add(t1); } }
结果样式:
相关推荐
iTextPDF是一个Java库,专门用于创建、编辑和处理PDF文档,而`iText-asian-5.2.0.jar`和`itextpdf-5.5.5.jar`是iText库的不同版本,用于支持中文字符和其他亚洲语言。 1. **iTextPDF**: iTextPDF是iText项目的一...
这个简单的demo展示了如何利用Itext库将数据导出为PDF格式,非常适合初学者理解和实践。下面,我们将深入探讨这个知识点,以及如何一步步实现这个功能。 首先,你需要在你的项目中引入ItextSharp库。ItextSharp是...
这篇博客文章“JAVA导出PDF Itext 中文文档”可能详细介绍了如何利用Itext库在Java中生成包含中文字符的PDF文件。Itext库支持多种语言,包括中文,使得开发者能够方便地创建多语言的PDF文档。 首先,生成PDF时,...
开发者可以根据实际需求,结合Adobe PDF编辑器的可视化编辑和iTextPDF的编程能力,实现各种自定义的PDF生成逻辑。 总之,Adobe PDF编辑器与Java的iTextPDF库结合,为企业提供了灵活且高效的PDF文档处理方案,无论是...
本篇文章将详细介绍如何利用iText库操作PDF,从数据库中导出大量数据。 首先,我们需要理解iText的基本概念和功能。iText提供了丰富的API,可以用于创建新的PDF文档、添加文本、图像、表格、链接等元素,以及对已有...
在这个场景中,"java iText 实现从数据库中导出数据到已有的PDF模板"是一个常见的需求,它涉及到多个关键知识点。 首先,我们需要了解iText库的基本用法。iText提供了一系列API,可以创建新的PDF文档,也可以在已有...
iText是一个流行的Java库,专门用于生成和处理PDF文档,它提供了丰富的API来实现各种复杂的PDF操作。这篇博客"利用iText操作PDF从数据库导出大量数据--汇总(一)"显然讨论了如何利用iText将数据库中的数据高效地...
在这个"Struts2+IText动态导出PDF示例源码"项目中,开发者利用这两者结合,实现了在Web应用中动态生成PDF文件的功能。这在报表生成、合同制作、证书打印等场景中非常实用。 首先,Struts2作为控制器层框架,负责...
在这个场景中,我们将讨论如何结合Velocity和Itext来实现PDF的导出。 首先,Velocity的工作原理是通过模板语言,允许开发者将静态内容与动态数据结合,生成最终的输出。它的语法简洁,易于理解,特别适合生成基于...
java使用iText导出PDF文本绝对定位(实现方法) iText是一个流行的Java类库,用于生成PDF文档。下面我们将探讨如何使用iText在Java中导出PDF文本,并实现绝对定位。 iText简介 iText是一个开源的Java类库,用于...
<artifactId>itextpdf <version>5.5.13 ``` 接下来,我们将探讨如何生成PDF文件。以下是一个简单的例子,展示如何创建一个包含简单文本的PDF文档: ```java import com.itextpdf.text.Document; import ...
**ITextPDF库在Java中的应用:创建模板化的PDF文档** `iTextPDF`是一个流行的开源Java库,用于创建、编辑和操作PDF文档。在这个场景中,我们将探讨如何使用iTextPDF来根据模板生成包含表单、表格、条形码和二维码的...
本项目名为“JAVA ITEXT 导出试卷”,其核心功能是使用Java和iText库来自动化生成PDF格式的试卷。 首先,我们需要了解iText库的基本用法。iText提供了许多API,允许开发者添加文本、图像、表格、链接等元素到PDF文...
1. **导入itextpdf库**:在项目中添加itextpdf的依赖,这通常通过Maven或Gradle等构建工具完成。 2. **读取Excel**:使用Apache POI等库读取Excel文件,获取其内容和样式信息。 3. **创建PDF文档**:初始化一个...
在IText的帮助下,开发者可以方便地实现PDF文档的动态生成,包括根据预设模板导出含有文字和图片的PDF文件。本教程将深入探讨如何使用IText库来实现这一功能。 **1. IText库简介** IText是Aditya Birla Software ...
7. **版本控制**:提供的不同版本的iText(如`iText-2.1.5.jar`和`itextpdf-5.3.2.jar`)代表了库的发展历程,每个新版本通常包含改进和新功能。 8. **源码和文档**:`itextpdf-5.3.2-sources.jar`包含了源代码,...