不同页边距取决于奇数页或偶数页

Different margins depending on odd or even page

我必须生成一个包含通过参数传递的动态内容的报告。问题是他们让我根据页面是奇数还是偶数来调整不同的页边距。我已经看到一些解决方法,他们使用 $V {PAGE_NUMBER}% 2 == 1,但就我而言,由于内容可能会有所不同,我认为这是不可能的。

如果您只需要 PDF 输出,您可以通过 net.sf.jasperreports.export.pdf.odd.page.offset.x and net.sf.jasperreports.export.pdf.even.page.offset.x 属性来实现。

如果需要,您还可以使用 expression/parameter 定义 属性 值:

<propertyExpression name="net.sf.jasperreports.export.pdf.even.page.offset.x"><![CDATA[String.valueOf($P{EvenPageMargin})]]></propertyExpression>
<parameter name="EvenPageMargin" class="java.lang.Integer"/>

感谢您的回复。

最后我用 Java 解决了问题,我得到了页面并设置了条件 X 是奇数还是偶数。

public byte[] generatePdf(Dto dto) throws IOException, JRException {
    InputStream inputJasper = null;        
    JasperPrint print = JasperFillManager.fillReport(inputJasper, parameters, new JREmptyDataSource());
    margenPorPagina(print);         
    report = JasperUtils.export(print, JasperUtils.ReportFormat.PDF);
}

private void margenPorPagina(JasperPrint print) {
    List<JRPrintPage> pages = print.getPages();
    IntStream.range(0, pages.size()).forEach(index -> 
    obtenerElementosPorPagina(pages.get(index), index));
}

private void obtenerElementosPorPagina(JRPrintPage page, int contadorPagina) {
    List<JRPrintElement> pageElements = page.getElements();
    
    if (contadorPagina%2==0) {
        margenPorElemento(pageElements, Constantes.MARGEN_4CM);
    } else {
        margenPorElemento(pageElements, Constantes.MARGEN_1_5CM);
    }
}

private void margenPorElemento(List<JRPrintElement> pageElements, int margen) {
    pageElements.stream().forEach(pageElement -> {
        pageElement.setX(margen);    
        pageElement.setWidth(Constantes.LARGO_CAMPO);   
    }); 
}