Domanda

C'è un modo per impostare diversi stili di pagina con Flying Saucer / iText? Devo avere la prima coppia di pagine in orizzontale, quindi passare alla modalità verticale in una determinata pagina e uscire.

Qualche idea?

È stato utile?

Soluzione

Non importa, ho trovato la risposta. Per chiunque sia interessato, ecco come lo fai:

@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }

voil & # 225;

Altri suggerimenti

Per chiunque sia ancora bloccato dal problema menzionato da Derek, ho scoperto che devo impostare esplicitamente una larghezza sull'elemento che sta cambiando il suo layout. Quindi, con l'esempio div

<div class="portraitPage">
    <p>Some page content in portrait</p>
</div>
<div class="landscapePage">
    <p>Some page content in landscape</p>
</div>

formatterà correttamente una pagina ritratto seguita da una pagina orizzontale, ma il contenuto nella pagina orizzontale sarà largo solo quanto la pagina ritratto, anche se la dichiarazione @page land contiene una larghezza. Ciò di cui avevo bisogno era impostare la larghezza direttamente sul div a cui è stata applicata la classe pertinente, quindi la dichiarazione è qualcosa di più simile a

.landscapePage { page:land; width: 29.7cm; }

Prestare attenzione, tuttavia, che la larghezza dovrebbe tenere conto di eventuali margini o imbottiture applicati tramite il blocco di dichiarazione @page.

Puoi gestire dinamicamente le dimensioni della tua pagina in fase di esecuzione. Segui il passaggio seguente

  1. Aggiungi un parametro extra per il tipo di pagina, ad esempio orizzontale o verticale in pageType param
  2. Aggiungi il seguente codice nel tag di stile quando stai generando il tuo html sul lato server, ad esempio
FileOutputStream fos = new FileOutputStream(file);
ITextRenderer renderer = new ITextRenderer();
StringBuilder htmls = new StringBuilder();
htmls.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
htmls.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
htmls.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
htmls.append("<head><style type=\"text/css\">");
htmls.append("@page{ size: "+request.getParameter("pageType")}");
htmls.append("</style></head>");
htmls.append("<body><div>dynamic pdf data</div></body></html>");
renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED);
renderer.setDocumentFromString(htmls.toString());
renderer.layout();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".pdf\"");
renderer.createPDF(outputStream);
renderer.createPDF(fos);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top