Domanda

Abbiamo incorporato JasperReports nella nostra applicazione per generare report, ma sono stato piuttosto soddisfatto del modo in cui il JEditorPaneHtmlMarkupProcessor gestisce la scrittura XHTML arbitraria. Ad esempio, avevo bisogno di produrre un elenco puntato ad un certo punto, che lo fa, ma perché lo converte in caratteri di punto effettivi e ritorni a capo, un proiettile con abbastanza lunghi risultati di testo nella confezione testo per allinearsi con il proiettile, non con il prima lettera del testo.

A causa di questa e simili problemi, ho pensato che avrei potuto provare il rendering XHTML contenuto come grafica (utilizzando il renderer XHTML flyingsaucer). Questo mi dà molto migliore controllo su come appare, ma c'è ancora un problema. Secondo La guida definitiva per JasperReports , "All posizionamento e dimensionamento nei modelli JasperReports e documenti viene eseguita utilizzando la risoluzione Java predefinito di 72 dpi." Sembra che le singole lettere per essere resi devono essere posizionati in coordinate integrali. A 72 dpi, questo è un grosso problema, dal momento che ammonta a errori di posizionamento sub-pixel nel peggiore dei casi, non di alcuna conseguenza significativa. Tuttavia, durante il rendering in PDF, JasperReports soffia fino a 300 dpi, con conseguente nelle posizioni orizzontali di alcune lettere che sono fuori da più pixel, a volte.

C'è qualche modo per ottenere una migliore resa dei XHTML arbitraria, o c'è qualche modo per rendere JasperReports svolgere il suo posizionamento e dimensionamento a 300 dpi anziché 72?

È stato utile?

Soluzione

Alla fine ho risolto questo utilizzando un renderer che non insistere su posizioni carattere integrale: il JEditorPane da swing:

JEditorPane pane = new JEditorPane();
pane.setBorder(null);
pane.setSize(w, h);
pane.setContentType("text/html");
pane.setEditable(false);
pane.setText(html);
pane.paint(g2);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top