java 纯代码导出pdf合并单元格

java 纯代码导出pdf合并单元格

接上篇博客 java导出pdf(纯代码实现) 后有一部分猿友叫我提供一下源码,实际上我的源码已经贴在帖子上了,都是同样的步骤,只是加多一点设置就可以了。今天我再次上传一下相对情况比较完整导出PDF的场景,包含列表,合并单元格,设置边框等,具体请先看效果图:
注:次效果图仅供参考,内容均为测试数据不具有任何意义。

废话不多说,直接上源码:

java 复制代码
@SneakyThrows
    @PostMapping("/download")
    @ApiOperation(value = "模板下载")
    public void download(@RequestBody TemplateDownloadDTO downloadDTO, HttpServletRequest request, HttpServletResponse response){
		//该导出仅针对一条数据故要传id确定数据
        Assert.notNull(downloadDTO.getId(),"id必传");

        request.getSession();

        String fileName = "文件名称";

        PdfUtil.setResponseContentType(response,fileName);

        stockOutService.download(downloadDTO,response);
    }

以下为导出PDF头部设置,具体在另外一个帖子中有

java 复制代码
public static void setResponseContentType(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
        response.setContentType("application/pdf");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".pdf");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
    }

以下是逻辑部分

java 复制代码
/**
     * 调运明细模板下载
     *
     * @param downloadDTO 入参
     * @param response    返回
     */
    @Override
    public void download(TemplateDownloadDTO downloadDTO, HttpServletResponse response) {		//你自己的查询数据的逻辑部分,我这里做了删减不展示
        List<StockOutDtlVO> vos = BeanUtils.copyListPropertiesByClass(list, StockOutDtlVO.class);

        vo.setDtls(vos);

        //定义全局字体静态变量
        Font titlefont;
        Font headfont = null;
        Font headfont1 = null;
        Font keyfont = null;
        Font textfont = null;
        Font textfont1 = null;
        Font content = null;
        Font space = null;
        Font space1 = null;
        Font space2 = null;
        Font space3 = null;
        //最大宽度
        try {
            BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            titlefont = new Font(font, 16, Font.BOLD);
            //四号
            headfont = new Font(font, 14, Font.BOLD);
            headfont1 = new Font(font, 14, Font.NORMAL);
            //三号
            content = new Font(font, 16, Font.NORMAL);
            //小四
            textfont = new Font(font, 11, Font.BOLD);
            textfont1 = new Font(font, 11, Font.NORMAL);

            space = new Font(font, 2, Font.NORMAL);
            space1 = new Font(font, 10, Font.NORMAL);
            space2 = new Font(font, 30, Font.NORMAL);
            space3 = new Font(font, 20, Font.NORMAL);
        } catch (Exception e) {
            e.printStackTrace();
        }

        BaseFont bf;
        Font font = null;
        try {
            //创建字体
            bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            font = new Font(bf, 22, Font.BOLD, BaseColor.BLACK);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Document document = new Document(new Rectangle(PageSize.A4));
		//设置PDF工作区上下左右和纸张的边距
        document.setMargins(60, 60, 72, 72);

        try {
            PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
            //页码,具体详见另外一篇帖子
            writer.setPageEvent(new PdfPageUtil());
            document.open();

            Paragraph paragraph = new Paragraph("深圳市市级救灾物资调运明细表", font);
            paragraph.setAlignment(Element.ALIGN_CENTER);
            document.add(paragraph);

            document.add(new Paragraph("\n", space1));
            Paragraph paragraph1 = new Paragraph(CharSequenceUtil.format("编号:{}", vo.getDjbh()), headfont1);
            paragraph1.setAlignment(Element.ALIGN_RIGHT);
            document.add(paragraph1);

            document.add(new Paragraph("\n", space));
            float[] widths = {25f, 25f, 25f, 25f, 25f, 25f};
            PdfPTable table = new PdfPTable(widths);
            table.setSpacingBefore(20f);
            table.setWidthPercentage(100.0f);
            table.setHeaderRows(Element.ALIGN_CENTER);
            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

            PdfPCell cell = null;
            //第一行
            cell = new PdfPCell(new Paragraph("调出单位", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(55);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getDcdwmc(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("接收单位", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getJsdwmc(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("储备服务单位", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("XXXX", textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("调出地点", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(55);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getDckdmc(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("接收地点", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getPsdz(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("车牌号", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(null, textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系人", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(55);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系人", textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系人", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getJsdwlxr(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系人\n(司机)", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(null, textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系电话", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(40);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("1300000000", textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系电话", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(vo.getJsdwlxrdh(), textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("联系人电话", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph(null, textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("车型及运输费用结算", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(55);
            table.addCell(cell);

            String concent = CharSequenceUtil.format("车型:{} \n\n 结算方式:{}", getCx(vo), getJsfs(vo));
            cell = new PdfPCell(new Paragraph(concent, textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //合并单元格
            cell.setColspan(5);
            cell.setRowspan(1);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("调出时间", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(40);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("    月      日      时      分", textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setColspan(2);
            cell.setRowspan(1);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("应送达时间", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("    月      日      时      分", textfont1));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setColspan(2);
            cell.setRowspan(1);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("物资名称", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setFixedHeight(40);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("规格型号", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //后面2个单元格合并
            cell.setColspan(2);
            //合并为1个
            cell.setRowspan(1);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("数量", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("单位", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            cell = new PdfPCell(new Paragraph("备注", textfont));
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);
            
			//以下为列表数据输出
            List<StockOutDtlVO> dtl = vo.getDtls();
            if (dtl.size() > 0) {
                for (StockOutDtlVO stock : dtl) {
                    PdfPCell cell1 = new PdfPCell(new Paragraph(stock.getWzmc(), textfont1));
                    PdfPCell cell2 = new PdfPCell(new Paragraph(stock.getGgxh(), textfont1));
                    PdfPCell cell3 = new PdfPCell(new Paragraph(stock.getSl().toString(), textfont1));
                    PdfPCell cell4 = new PdfPCell(new Paragraph(stock.getDw(), textfont1));
                    PdfPCell cell5 = new PdfPCell(new Paragraph(stock.getBz(), textfont1));

                    cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
                    cell1.setFixedHeight(40);

                    cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);
                    cell2.setColspan(2);
                    cell2.setRowspan(1);
//                    cell2.setFixedHeight(20);

                    cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell3.setVerticalAlignment(Element.ALIGN_MIDDLE);
//                    cell3.setFixedHeight(20);

                    cell4.setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell4.setVerticalAlignment(Element.ALIGN_MIDDLE);
//                    cell4.setFixedHeight(20);

                    cell5.setHorizontalAlignment(Element.ALIGN_CENTER);
                    cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);
//                    cell5.setFixedHeight(20);

                    table.addCell(cell1);
                    table.addCell(cell2);
                    table.addCell(cell3);
                    table.addCell(cell4);
                    table.addCell(cell5);
                }
            }
            document.add(table);

            document.add(new Paragraph("\n", space2));

            float[] widthes = {25f, 25f};
            table = new PdfPTable(widthes);
            table.setSpacingBefore(20f);
            table.setWidthPercentage(100.0f);

            PdfPCell cell1 = new PdfPCell(new Paragraph("储备管理服务单位:", headfont1));
            cell1.setVerticalAlignment(Element.ALIGN_LEFT);
            cell1.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell1.setFixedHeight(35);
            //加上该配置不显示单元格边框
            cell1.setBorder(0);

            PdfPCell cell2 = new PdfPCell(new Paragraph("承运司机:", headfont1));
            cell2.setVerticalAlignment(Element.ALIGN_LEFT);
            cell2.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell2.setBorder(0);

            table.addCell(cell1);
            table.addCell(cell2);

            document.add(table);

            float[] widthe2 = {25f, 25f, 25f};
            table = new PdfPTable(widthe2);
            table.setSpacingBefore(20f);
            table.setWidthPercentage(100.0f);

            PdfPCell cell3 = new PdfPCell(new Paragraph("调出单位初审:", headfont1));
            cell3.setVerticalAlignment(Element.ALIGN_LEFT);
            cell3.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell3.setFixedHeight(35);
            cell3.setBorder(0);

            PdfPCell cell4 = new PdfPCell(new Paragraph("复核:", headfont1));
            cell4.setVerticalAlignment(Element.ALIGN_LEFT);
            cell4.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell4.setBorder(0);

            PdfPCell cell5 = new PdfPCell(new Paragraph("领导审批:", headfont1));
            cell5.setVerticalAlignment(Element.ALIGN_LEFT);
            cell5.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell5.setBorder(0);

            table.addCell(cell3);
            table.addCell(cell4);
            table.addCell(cell5);

            document.add(table);

            float[] widthe3 = {25f, 25f};
            table = new PdfPTable(widthe3);
            table.setSpacingBefore(20f);
            table.setWidthPercentage(100.0f);

            PdfPCell cell6 = new PdfPCell(new Paragraph("接收单位签收人:", headfont1));
            cell6.setVerticalAlignment(Element.ALIGN_LEFT);
            cell6.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell6.setFixedHeight(35);
            cell6.setBorder(0);

            PdfPCell cell7 = new PdfPCell(new Paragraph("签收时间:    月    日    时    分", headfont1));
            cell7.setVerticalAlignment(Element.ALIGN_LEFT);
            cell7.setHorizontalAlignment(Element.ALIGN_MIDDLE);
            cell7.setBorder(0);

            table.addCell(cell6);
            table.addCell(cell7);

            document.add(table);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

该用到的步骤我已经标注的很详细了,即是我自己的学习记录希望能帮到各位猿友。如有不足之处还望多多指教!

相关推荐
众拾达人10 分钟前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.12 分钟前
Mybatis-Plus
java·开发语言
不良人天码星13 分钟前
lombok插件不生效
java·开发语言·intellij-idea
守护者17033 分钟前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
源码哥_博纳软云35 分钟前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
禾高网络36 分钟前
租赁小程序成品|租赁系统搭建核心功能
java·人工智能·小程序
学会沉淀。42 分钟前
Docker学习
java·开发语言·学习
如若12344 分钟前
对文件内的文件名生成目录,方便查阅
java·前端·python
西猫雷婶1 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
kiiila1 小时前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt