Muchas personas que generan archivos PDF deben vincularlos. Un buen enlace requiere que cada otra página soporte un tamaño de margen alternativo en sus lados izquierdo y derecho. Sé que JasperReports no fue compatible con esto en su serie 3.x. ¿Esto es compatible con la serie 4.x?¿JasperReports admite alternar los márgenes de canal aún?
Respuesta
Puede realizar marginMirroring como menciona Dave, al subclasificar JRPdfExporter, anulando el método, exportReportToStream. Lamentablemente, deberá copiar la fuente de este método en su anulación. En su anulación, modificará el bucle de la página, así:
for(int pageIndex = startPageIndex; pageIndex <= endPageIndex; pageIndex++)
{
int margin = marginLeft;
if (pageIndex % 2 == 1) margin = marginRight;
parameters.put(JRExporterParameter.OFFSET_X, margin);
setOffset();
...
El constructor de mi subclase toma en los márgenes:
public MirroringJRPdfExporter(int left, int right, int top, int bottom) {
this.marginLeft = left;
this.marginRight = right;
this.marginTop = top;
this.marginBottom = bottom;
}
Tomé en la parte superior e inferior también, por si acaso necesario para reflejar eso para página flipping.
Otra nota desafortunada, exportReportToStream utiliza un ayudante, JRPdfExporterTagHelper, y llama a 2 métodos, init y setPdfWriter, que están protegidos, por lo que su subclase no se compilará a menos que subclass el auxiliar y exponer esos métodos a su subclase. Hice esto:
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);
}
}
Entonces, yo lo llamo así:
MirroringJRPdfExporter exporter = new MirroringJRPdfExporter(72, 36, 44, 31);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();
Para trabajar con Jasper 5.6 además de la respuesta a @bigspotteddog que hice:
@Override
protected PdfReportConfiguration getCurrentItemConfiguration() {
SimplePdfReportConfiguration config = new SimplePdfReportConfiguration();
PdfReportConfiguration currentItemConfiguration = super.getCurrentItemConfiguration();
config.setCollapseMissingBookmarkLevels(currentItemConfiguration.isCollapseMissingBookmarkLevels());
config.setForceLineBreakPolicy(currentItemConfiguration.isForceLineBreakPolicy());
config.setForceSvgShapes(currentItemConfiguration.isForceSvgShapes());
config.setIgnoreHyperlink(currentItemConfiguration.isIgnoreHyperlink());
config.setOverrideHints(currentItemConfiguration.isOverrideHints());
config.setSizePageToContent(currentItemConfiguration.isSizePageToContent());
config.setEndPageIndex(currentItemConfiguration.getEndPageIndex());
config.setExporterFilter(currentItemConfiguration.getExporterFilter());
config.setHyperlinkProducerFactory(currentItemConfiguration.getHyperlinkProducerFactory());
config.setPageIndex(currentItemConfiguration.getPageIndex());
config.setProgressMonitor(currentItemConfiguration.getProgressMonitor());
config.setStartPageIndex(currentItemConfiguration.getStartPageIndex());
config.setOffsetX(margin);
return config;
}
y:
margin = marginLeft;
if (pageIndex % 2 == 1) margin = marginRight;
en el circuito.
En JasperReports 6.x puede especificar los márgenes de las páginas pares e impares por separado en la plantilla de informe (jrxml) mediante el establecimiento de
<property name="net.sf.jasperreports.export.pdf.odd.page.offset.x" value="10"/>
<property name="net.sf.jasperreports.export.pdf.even.page.offset.x" value="-10"/>
Un ejemplo se puede encontrar en el archivo de ejemplo JasperReports demo/samples/query/reports/QueryReport.jrxml
. Encontré esta solución en an issue.
Lo mismo se puede ajustar utilizando la clase JRPdfExporter
al exportar el informe a PDF en Java:
JRPdfExporter exporter = new JRPdfExporter();
SimplePdfReportConfiguration configuration = new SimplePdfReportConfiguration();
configuration.setOddPageOffsetX(10);
configuration.setEvenPageOffsetX(-10);
exporter.setConfiguration(configuration);
- 1. iText: ¿Funcionan los márgenes?
- 2. Color de fila alterno para JasperReports
- 3. ggplot2 trazar los márgenes de área?
- 4. ggplot2 libre los márgenes constriñen el resto
- 5. Cómo establecer los márgenes (relleno) en UITextView?
- 6. ¿Cómo eliminar los márgenes del submenú MenuStrip?
- 7. CSS - ¿Los márgenes son algo malo?
- 8. Colapsando los márgenes en los diseños de Android
- 9. ¿Admite Lua los decoradores?
- 10. dependencias mínimas para JasperReports
- 11. Alternativas a JasperReports y BIRT
- 12. Emacs: ¿Alternar entre los marcadores visuales?
- 13. Alternar los dos vars en Scala
- 14. JasperReports: especificando varias fuentes?
- 15. JasperReports Vs iReport
- 16. JasperReports Fuente predeterminada
- 17. ¿Cuál es el punto de los márgenes de colapso CSS?
- 18. Cómo deshacerse de los márgenes en el diseño de jquery
- 19. encabezados de página CSS: cómo usar los márgenes de impresión?
- 20. Comparación entre JasperReports e iText/iTextpdf
- 21. Reproducción nativa de Android con canal alfa
- 22. PDF - Eliminar márgenes blancos
- 23. ¿Admite Play Framework los "fragmentos"?
- 24. MonoTouch.Dialog UITableView sin márgenes
- 25. Elementos secundarios con márgenes dentro de los DIV
- 26. Látex - Cambie los márgenes de solo unas pocas páginas
- 27. Cómo recortar los márgenes de PDF utilizando pdftk y/MediaBox
- 28. centro de un LinearLayout y los márgenes "porcentaje"
- 29. css posicionamiento de los márgenes negativos del índice Z
- 30. ¿Cómo establecer los márgenes para una figura de matplotlib?
Qué quiere decir JasperReports o iReport? –