1. 程式人生 > >關於使用flying-saucer-pdf,實現xhtml2pdf

關於使用flying-saucer-pdf,實現xhtml2pdf

一個 cli 樣式 內容 let pdf格式 www. git -i

@author Guoguo 2013.11.24

關於flying-saucer-pdf

是一個XML/CSS渲染器,flying-saucer-pdf工具以XML標準文件作為輸入,CSS進行排版、樣式修飾,輸出a Swing Panel、圖片、PDF格式文檔。支持XHTML 1.0 (strict)、HTML格式,CSS 2.1 。談到CSS,要註意屏幕樣式和平面媒體樣式(即打印樣式)的區別;

flying-saucer-pdf依賴於itext

應用場景

在網站上即時下載PDF

局限問題

資源加載與布局是單線程的。
支持XHTML比XML + CSS,並不是所有的XHTML、HTML標簽,如不支持<object>。
不支持傳統的HTML或“sheet”。
支持擺動打印,但質量不足。在郵件列表上詢問詳情。
不支持增量布局(僅適用於屏幕媒體)。
它不能用於用戶可編輯的內容;輸出是只讀的。
不支持HTML插件,如applet、flash程序等。
不支持腳本(如JavaScript)。
對內容的動態更改需要重新加載文檔(快速但明顯),不能動態地更改DOM並查看結果。
不支持JavaScript DOM回調(onload,onclick事件等)。

轉PDF

1.加載字體,如黑體、宋體等中文字體。其它支持字體可以查看 com.lowagie.text.pdf.BaseFont類

import com.lowagie.text.pdf.BaseFont;

ITextRenderer renderer = new ITextRenderer();
FontResolver resolver = renderer.getFontResolver();
resolver.addFont (
    "C:\\WINNT\\Fonts\\ARIALUNI.TTF",
    BaseFont.IDENTITY_H,
    BaseFont.NOT_EMBEDDED
);

2.關於PDF每頁大小,請參照CSS3打印樣式https://www.w3.org/TR/css3-page/

3.關於PDF每頁頁邊距,頁眉頁腳,請參照CSS3打印樣式https://www.w3.org/TR/css3-page/

4.關於PDF分頁

渲染時,FS有默認分頁。

當然需要強制分頁的,可使用

page-break-before

page-break-after

強制不分頁,可使用

page-break-inside

5.支持bookmarks\圖片

參考

官方文檔:http://flyingsaucerproject.github.io/flyingsaucer/r8/guide/users-guide-R8.html

關於使用flying-saucer-pdf,實現xhtml2pdf