java生成word文件

里面包含了表格,图片还有一些文字格式设置,

1、jar包

        <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>2.1.7</version>
        </dependency>
        <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext-rtf</artifactId>
        <version>2.1.7</version>
        </dependency>
        <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
        </dependency>

2、后台代码

public static void main(String[] args) {
       String filePath = exportDoc(request, barImgPath, session);
    }

 public String exportDoc(HttpServletRequest request, String path1, HttpSession session) {
        try {
            // 设置纸张大小
            Document document = new Document(PageSize.A4);
            //生成图片的地址
            String basePath = HTTP_URL_LOCATION;
            String wordPath = basePath + "anyWord/";
            String pieImgPath = basePath + "echartsImg/";
            String todayFolder = FileUtils.getDailyFilePath();
            File path = new File(wordPath + todayFolder);
            File piePath = new File(pieImgPath + todayFolder);
            if (!path.exists()) {
                path.mkdirs();
            }
            if (!piePath.exists()) {
                piePath.mkdirs();
            }
            long wordName = System.nanoTime();
            long pieImgName1 = System.nanoTime();
            String filePath = wordPath + todayFolder + wordName + ".doc";
            String piePath1 = pieImgPath + todayFolder + pieImgName1 + ".png";

            File file = new File(filePath);
            RtfWriter2.getInstance(document, new FileOutputStream(file));
            document.open();
            // 设置中文字体
            BaseFont bfChinese = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,
                    BaseFont.NOT_EMBEDDED);
            // 标题字体风格
            Font titleFont = new Font(bfChinese, 15, Font.BOLD);
            Paragraph title = new Paragraph("健康档案重复建档情况分析");
            // 设置标题格式对齐方式
            title.setAlignment(Element.ALIGN_CENTER);
            title.setFont(titleFont);
            document.add(title);
            //二级标题风格
            Font secondFont = new Font(bfChinese, 12, Font.BOLD);
            //正文字体风格
            Font zwFont = new Font(bfChinese, 10);
            String secondTitle = "一、基本情况";
            Paragraph secondStyle = new Paragraph(secondTitle);
            // 正文格式左对齐
            secondStyle.setAlignment(Element.ALIGN_LEFT);
            secondStyle.setFont(secondFont);
            // 离上一段落空的行数
            secondStyle.setSpacingBefore(20);
            // 设置第一行空的列数
            secondStyle.setFirstLineIndent(4);
            document.add(secondStyle);

            //String zlContent = word.getZlContent(request);
            xx xx= (xx) session.getAttribute("xx");
            List<xx> resultList = xx
                    .xx(xx);
            Table table = new Table(5);
            Cell cell = new Cell("header");
            //单元格水平对齐方式
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //单元格垂直对齐方式
            cell.setVerticalAlignment(Element.ALIGN_CENTER);
            cell.setHeader(true);
            table.addCell("1");
            table.addCell("2");
            table.addCell("3");
            table.addCell("4");
            table.addCell("5");
            String zlContent = "11" + resultList.size() + "22";
            String jdzsContent = "33";
            String tjgcfContent = "44";
            DefaultPieDataset pie1 = new DefaultPieDataset();
            int countyCount = 0;
            for (xx xx: resultList) {
                String cityName = xx.getOrgName();
                zlContent += cityName + ",";
                jdzsContent += cityName + ":" + xx.getCount() + ",";
                tjgcfContent += cityName + ":" + xx.getTargeta() + ",";
                pie1.setValue(cityName, Integer.parseInt(xx.getTargeta()));
                String cityCode = xx.getTypeCode();
                List<ss> countyList = xx
                        .xx(xx);
                cell = new Cell(ss.getOrgName());
                int rospanCount = countyList.size() + 1;
                cell.setRowspan(rospanCount);
                //单元格水平对齐方式
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                //单元格垂直对齐方式
                cell.setVerticalAlignment(Element.ALIGN_CENTER);
                table.addCell(cell);
                table.addCell("总计");
                table.addCell(xx.getOpDate());
                table.addCell(xx.getCount());
                table.addCell(xx.getTargeta());
                for (xx xx: countyList) {
                    table.addCell(xx.getOrgName());
                    table.addCell(xx.getOpDate());
                    table.addCell(xx.getCount());
                    table.addCell(xx.getss());
                }
                countyCount += countyList.size();
            }
            EchartsToImg.createPieChart(pie1, piePath1, "12");
            zlContent += "13" + countyCount + "14";
            Paragraph zlStyle = new Paragraph(zlContent);
            zlStyle.setAlignment(Element.ALIGN_LEFT);
            zlStyle.setFont(zwFont);
            zlStyle.setSpacingBefore(20);
            zlStyle.setFirstLineIndent(4);
            document.add(zlStyle);
            //表格
            document.add(table);

            //指标标题
            String zbTitle = "34";
            Paragraph zbStyle = new Paragraph(zbTitle);
            zbStyle.setAlignment(Element.ALIGN_LEFT);
            zbStyle.setFont(secondFont);
            zbStyle.setSpacingBefore(20);
            document.add(zbStyle);
            //指标1小标题
            Paragraph xyStyle = new Paragraph("1、45");
            xyStyle.setAlignment(Element.ALIGN_LEFT);
            xyStyle.setFont(zwFont);
            xyStyle.setSpacingBefore(20);
            xyStyle.setFirstLineIndent(4);
            document.add(xyStyle);
            //指标1文字分析
            Paragraph xykxStyle = new Paragraph(jdzsContent);
            xykxStyle.setAlignment(Element.ALIGN_LEFT);
            xykxStyle.setFont(zwFont);
            xykxStyle.setSpacingBefore(20);
            xykxStyle.setFirstLineIndent(4);
            document.add(xykxStyle);
            //指标1图片
            // 添加图片 Image.getInstance即可以放路径又可以放二进制字节流
            Image img1 = Image.getInstance(path1);
            img1.setAbsolutePosition(0, 0);
            img1.setAlignment(Image.ALIGN_CENTER);// 设置图片显示位置
            img1.scalePercent(70);// 表示显示的大小为原尺寸的50%
            // img.scaleAbsolute(60, 60);// 直接设定显示尺寸
            // img.scalePercent(25, 12);//图像高宽的显示比例
            // img.setRotation(30);//图像旋转一定角度
            document.add(img1);

            //指标2小标题
            Paragraph kfxtStyle = new Paragraph("2、67");
            kfxtStyle.setAlignment(Element.ALIGN_LEFT);
            kfxtStyle.setFont(zwFont);
            kfxtStyle.setSpacingBefore(20);
            kfxtStyle.setFirstLineIndent(4);
            document.add(kfxtStyle);
            //指标2文字分析
            Paragraph kfStyle = new Paragraph(tjgcfContent);
            kfStyle.setAlignment(Element.ALIGN_LEFT);
            kfStyle.setFont(zwFont);
            kfStyle.setSpacingBefore(20);
            kfStyle.setFirstLineIndent(4);
            document.add(kfStyle);
            //指标2图片
            Image img2 = Image.getInstance(piePath1);
            img2.setAbsolutePosition(0, 0);
            img2.setAlignment(Image.ALIGN_CENTER);// 设置图片显示位置
            img2.scalePercent(70);// 表示显示的大小为原尺寸的50%
            document.add(img2);

            document.close();
            return filePath;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return "";
        } catch (BadElementException e) {
            e.printStackTrace();
            return "";
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return "";
        } catch (DocumentException e) {
            e.printStackTrace();
            return "";
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值