我用Jasper创建了一个文档。试图用以下三种方式设置边距,
<jasperReport ... pageWidth="595" pageHeight="842" ... columnWidth="595" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" ...>
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();
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种方式,我可以在内容和边框之间留出一些间距,但是当我打印出来时,会出现以下警告
这是因为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)破坏文档。
我该如何避免?此外,如果有任何其他方法比这个更简单,以实现我想要的,请分享。