2009-03-05 7 views

risposta

21

Nevermind, ha trovato la risposta. Per chiunque sia interessato, ecco come farlo:

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

voilá!

12

Per chiunque abbia ancora problemi con il problema descritto da Derek, ho scoperto che ho bisogno di impostare in modo esplicito una larghezza sull'elemento che sta cambiando il 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> 

che verrà formattare correttamente una pagina ritratto seguita da una pagina orizzontale, ma il contenuto nella pagina di paesaggio sarà solo il più ampio come pagina ritratto, anche se il @page terreno dichiarazione contiene una larghezza. Quello che mi serviva era quello di impostare la larghezza direttamente sul div che ha la relativa classe applicata, quindi la dichiarazione è qualcosa di più simile a

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

Attenzione però che la larghezza dovrebbe tener conto di eventuali margini o padding applicati tramite la blocco di dichiarazione @page.

0

È possibile gestire le dimensioni della pagina in modo dinamico in fase di esecuzione. Si prega di seguire il seguente passo

  1. Aggiungi parametro in più per il tipo di pagina ad esempio orizzontale o verticale in pageType param
  2. Add seguente codice nel tuo tag stile quando si sta generando il codice HTML sul lato server per 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);