gpt4 book ai didi

jasper-reports - JasperReports 是否支持交替装订边距?

转载 作者:行者123 更新时间:2023-12-04 19:19:34 25 4
gpt4 key购买 nike

许多生成 PDF 的人都需要绑定(bind)它们。一个好的装订要求每个其他页面都支持其左右两侧的备用边距大小。我知道 JasperReports 在其 3.x 系列中不支持这一点。这在 4.x 系列中是否支持?

最佳答案

您可以通过继承 JRPdfExporter、覆盖方法 exportReportToStream 来完成 Dave 提到的 marginMirroring。不幸的是,您需要将此方法的源代码复制到您的覆盖中。在您的覆盖中,您将修改页面循环,如下所示:

for(int pageIndex = startPageIndex; pageIndex <= endPageIndex; pageIndex++)
{
int margin = marginLeft;
if (pageIndex % 2 == 1) margin = marginRight;

parameters.put(JRExporterParameter.OFFSET_X, margin);
setOffset();
...

我的子类的构造函数占用了边距:
public MirroringJRPdfExporter(int left, int right, int top, int bottom) {
this.marginLeft = left;
this.marginRight = right;
this.marginTop = top;
this.marginBottom = bottom;
}

我也考虑了顶部和底部,以防我需要镜像以进行翻页。

另一个遗憾的是,exportReportToStream 使用了一个帮助器 JRPdfExporterTagHelper,并调用了两个 protected 方法 init 和 setPdfWriter,因此您的子类将无法编译,除非您也将帮助器子类化并将这些方法公开给您的子类。我这样做了:
public class JRPdfExporterTagHelper extends
net.sf.jasperreports.engine.export.JRPdfExporterTagHelper {

protected JRPdfExporterTagHelper(JRPdfExporter exporter) {
super(exporter);
}

public void setPdfWriter2(PdfWriter pdfWriter) {
setPdfWriter(pdfWriter);
}

public void init2(PdfContentByte pdfContentByte) {
init(pdfContentByte);
}
}

然后,我这样称呼它:
MirroringJRPdfExporter exporter = new MirroringJRPdfExporter(72, 36, 44, 31);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();

关于jasper-reports - JasperReports 是否支持交替装订边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com