使用表创建pdf的Java API:任何建议?
发布时间:2020-12-15 08:37:23 所属栏目:Java 来源:网络整理
导读:我需要创建一个包含一些表的PDF. 在google / stackoverflow上查看时,最常见的API似乎是iText,但这是在AGPL许可下,因此不适合我的目的. 我也经常看到apache pdfbox,但似乎没有对表的原生支持(虽然在 Apache PDFBox Java library – Is there an API for creat
我需要创建一个包含一些表的PDF.
在google / stackoverflow上查看时,最常见的API似乎是iText,但这是在AGPL许可下,因此不适合我的目的. 我也经常看到apache pdfbox,但似乎没有对表的原生支持(虽然在 Apache PDFBox Java library – Is there an API for creating tables?发布了一个稍微hacky的方式) 有没有人有任何建议? 解决方法
如果您的pdf不是动态的,JasperReport会很有用.但如果它是动态的,你需要动态制作,那么我推荐DynamicJasper
import ar.com.fdvs.dj.core.DynamicJasperHelper; import ar.com.fdvs.dj.core.layout.ClassicLayoutManager; import ar.com.fdvs.dj.domain.DynamicReport; import ar.com.fdvs.dj.domain.Style; import ar.com.fdvs.dj.domain.builders.ColumnBuilder; import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder; import ar.com.fdvs.dj.domain.constants.Border; import ar.com.fdvs.dj.domain.constants.Font; import ar.com.fdvs.dj.domain.constants.HorizontalAlign; import ar.com.fdvs.dj.domain.constants.Page; import ar.com.fdvs.dj.domain.constants.Transparency; import ar.com.fdvs.dj.domain.constants.VerticalAlign; import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn; HttpServletResponse response = getContext().getResponse(); response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires",0); response.setCharacterEncoding("ISO-8859-1"); response.setContentType("application/pdf"); response.setHeader("Content-Disposition","attachment; filename=example.pdf"); DynamicReportBuilder drb = new DynamicReportBuilder(); Style detailStyle = new Style(); detailStyle.setBorderTop(Border.THIN); detailStyle.setBorderBottom(Border.THIN); detailStyle.setBorderLeft(Border.THIN); detailStyle.setBorderRight(Border.THIN); Style headerStyle = new Style(); headerStyle.setFont(Font.ARIAL_MEDIUM_BOLD); headerStyle.setBorderBottom(Border.THIN); headerStyle.setBackgroundColor(Color.gray); headerStyle.setTextColor(Color.white); headerStyle.setHorizontalAlign(HorizontalAlign.CENTER); headerStyle.setVerticalAlign(VerticalAlign.MIDDLE); headerStyle.setTransparency(Transparency.OPAQUE); Style headerVariables = new Style(); headerVariables.setFont(Font.ARIAL_MEDIUM_BOLD); headerVariables.setHorizontalAlign(HorizontalAlign.RIGHT); headerVariables.setVerticalAlign(VerticalAlign.MIDDLE); Style titleStyle = new Style(); titleStyle.setFont(new Font(18,Font._FONT_VERDANA,true)); Style importeStyle = new Style(); importeStyle.setHorizontalAlign(HorizontalAlign.RIGHT); Style oddRowStyle = new Style(); oddRowStyle.setBorder(Border.NO_BORDER); oddRowStyle.setBackgroundColor(Color.LIGHT_GRAY); oddRowStyle.setTransparency(Transparency.OPAQUE); drb.addTitle(sessao.getNomeCliente()); drb.addTitleStyle(titleStyle); drb.addSubtitle("Consulta O.S."); drb.addOddRowBackgroundStyle(oddRowStyle); drb.addDefaultStyles(titleStyle,null,headerStyle,detailStyle); drb.addPageSizeAndOrientation(Page.Page_A4_Landscape()); int top = 10; int bottom = 10; int left = 10; int right = 10; drb.addMarginss(top,bottom,left,right); if (searchResults.isThereThisField()) { AbstractColumn columnState = ColumnBuilder.getInstance() .addColumnProperty("numeroOs",Integer.class.getName()) .addTitle("This Field") .addWidth(5) .build(); drb.addColumn(columnState); } 对所有领域都这样做. drb.addUseFullPageWidth(true); DynamicReport dr = drb.build(); JRDataSource ds = new JRBeanCollectionDataSource(lista); JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dr,new ClassicLayoutManager(),ds ); byte[] b = JasperExportManager.exportReportToPdf(jp); response.getOutputStream().write(b); response.flushBuffer(); setPath(null); 我刚刚在工作中得到了这个例子,我只是想给你一个很好的信息.我真的不知道如何解释,我只知道它有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |