加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用表创建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);

我刚刚在工作中得到了这个例子,我只是想给你一个很好的信息.我真的不知道如何解释,我只知道它有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读