Flying Saucer / iTextを使用したPDFの横向きと縦向きの両方
質問
Flying Saucer / iTextで異なるページスタイルを設定する方法はありますか?最初の2、3ページを横向きにしてから、特定のページでポートレートに切り替えて外に出す必要があります。
アイデアはありますか
解決
Nevermind、答えを見つけました。興味のある方は、これがあなたのやり方です:
@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }
ボイルá!
他のヒント
デレクが述べた問題にまだ悩まされている人のために、レイアウトを切り替える要素に幅を明示的に設定する必要があることがわかりました。したがって、divの例では
<div class="portraitPage">
<p>Some page content in portrait</p>
</div>
<div class="landscapePage">
<p>Some page content in landscape</p>
</div>
ポートレートページとランドスケープページを正しくフォーマットしますが、 @page land 宣言に幅が含まれている場合でも、ランドスケープページのコンテンツはポートレートページと同じ幅になります。必要なのは、関連するクラスが適用されているdivで幅を直接設定することでした。そのため、宣言は次のようになります
.landscapePage { page:land; width: 29.7cm; }
@page宣言ブロックを介して適用されるマージンまたはパディングを考慮に入れる必要があることに注意してください。
実行時にページサイズを動的に処理できます。次の手順に従ってください
- pageTypeパラメータに横向きまたは縦向きなどのページタイプのパラメータを追加します
- たとえば、サーバー側で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);
所属していません StackOverflow