2009-03-05 59 views

回答

21

沒關係,找到答案。對於任何有興趣的人,這是你如何做到這一點:

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

voilá!

12

對於任何人仍然堅持德里克提到的問題,我發現我需要明確設置切換其佈局的元素的寬度。因此,與該示例的div

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

它將正確格式化縱向頁面,然後橫向頁面,但在橫向頁面內容將只爲寬的縱向頁面,即使@Page土地聲明包含寬度。我需要的是直接設置寬度上具有應用相關類別的股利,因此,聲明是更多的東西一樣

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

不過要小心的是,寬度應考慮通過應用的任何利潤或填充@page聲明塊。

0

您可以在運行時動態處理頁面大小。請按照以下步驟

  1. 添加在pageType爲何PARAM頁面類型如橫向或縱向額外的參數
  2. 添加以下的,當你在服務器端生成的HTML代碼如你的風格標記代碼
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);