17

Flying Saucer/iText で異なるページ スタイルを設定する方法はありますか? 最初の数ページを横向きにしてから、特定のページで縦向きに切り替える必要があります。

何か案は?

4

3 に答える 3

23

気にしないで、答えを見つけました。興味のある人は、次のようにします。

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

出来上がり!

于 2009-03-05T09:02:42.187 に答える
14

デレクが言及した問題にまだ悩まされている人のために、レイアウトを切り替える要素の幅を明示的に設定する必要があることがわかりました。したがって、例の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 宣言ブロックを介して適用されるマージンやパディングを幅に考慮する必要があることに注意してください。

于 2010-08-24T10:16:33.877 に答える
1

実行時にページ サイズを動的に処理できます。次の手順に従ってください

  1. pageType パラメータに横向きや縦向きなど、ページ タイプのパラメータを追加します。
  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);
于 2014-06-12T10:40:31.757 に答える