不同页边距取决于奇数页或偶数页
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);
});
}
我必须生成一个包含通过参数传递的动态内容的报告。问题是他们让我根据页面是奇数还是偶数来调整不同的页边距。我已经看到一些解决方法,他们使用 $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);
});
}