Вы можете выполнить marginMirroring, как упомянуто Дейвом, подклассом JRPdfExporter, переопределив метод exportReportToStream. К сожалению, вам нужно будет скопировать исходный код этого метода в переопределение. В переопределении вы измените цикл страницы следующим образом:
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 и вызывает 2 защищенных метода 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();