2009-03-05 8 views

答えて

21

Nevermind、答えを見つけました。興味のある人は、これはあなたのやり方です:

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

voilá!

12

Derekが言及した問題にまだまだ取り組んでいる人にとっては、レイアウトを切り替える要素に明示的に幅を設定する必要があることが分かりました。ですから、例えばdivの

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

でそれは正しく横長のページに続く肖像ページをフォーマットしますが、景観ページ内のコンテンツが唯一でも@pageの土地ならば、同じ幅の肖像ページとして宣言になります幅を含んでいます。私は何を必要とすることは、関連するクラスが適用されたdiv要素に直接幅を設定することでしたので、宣言は幅が考慮介して適用任意のマージンやパディングを取る必要があることが、より

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

のようなものは注意してくださいです@page宣言ブロック。

0

実行時に動的にページサイズを処理できます。次のステップ

  1. ページタイプの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); 
関連する問題