将边距设置为word文档 - Jasper / Apache POI

时间:2015-07-09 12:06:51

标签: java jasper-reports apache-poi

我用Jasper创建了一个文档。试图用以下三种方式设置边距,

  1. 在iReport设计师中:
  2. <jasperReport ... pageWidth="595" pageHeight="842" ... columnWidth="595" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" ...>
    
    1. 在Java代码中
    2. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, connect);
      jasperPrint.setLeftMargin(20);
      jasperPrint.setRightMargin(20);
      jasperPrint.setTopMargin(20);
      jasperPrint.setBottomMargin(20);
      exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
      exporter.exportReport();
      
      1. 使用
      2. 编写Java代码
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap,connect);  
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OFFSET_X, 20);
        exporter.setParameter(JRExporterParameter.OFFSET_Y, 20);                                  
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
        exporter.exportReport();
        

        通过上述3种方式,我可以在内容和边框之间留出一些间距,但是当我打印出来时,会出现以下警告

        enter image description here

        这是因为Jasper给出的边距和内容之间的空间也被视为Microsoft Word中的数据(Jasper)。

        就我的研究而言,它是Jasper的一个已知问题,我怀疑到目前为止还有一个解决方法。 (如果有的话,请告诉我)

        但我不希望出现警告弹出窗口。通过在单词中打印文档时设置页边距可以避免这种情况。即使这样,它也会通过将页面底部移动到新页面来扰乱文档的布局。

        所以我的要求是避免弹出警告,并自动完成在MS Word中完成的边距设置。为此我使用Apache POI。

        流程是这样的,文档是在iReport中设计的,编译和生成的文档说 Document1.docx 保存在一个目录中,这是Apache POI的输入,其中设置了边距新文档生成为 Document2.docx

        File file = null;
        file = new File("C:\\temp\\Document1.docx");
        FileInputStream fis = new FileInputStream(file.getAbsolutePath());
        XWPFDocument document = new XWPFDocument(fis);
        CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
        CTPageMar pageMar = sectPr.addNewPgMar();
        pageMar.setLeft(BigInteger.valueOf(720L));
        pageMar.setTop(BigInteger.valueOf(720L));
        pageMar.setRight(BigInteger.valueOf(720L));
        pageMar.setBottom(BigInteger.valueOf(720L));
        FileOutputStream out = new FileOutputStream(new File(
                "C:\\temp\\Document2.docx"));
        document.write(out);
        out.close();
        

        所以 Document1.docx 会出现保证金警告弹出问题,而 Document2.docx 仍然没有同样的问题布局崩溃(底部page1转移到page2)破坏文档。

        我该如何避免?此外,如果有任何其他方法比这个更简单,以实现我想要的,请分享。

0 个答案:

没有答案