2013-03-02 46 views
1

我正在使用一個Java類(http://pastebin.com/KhSGPmCV),它接收HTML文檔並嘗試通過以下步驟將其轉換爲PDF文檔:使用XSL將HTML轉換爲PDF FO有分頁問題 - 僅顯示第一頁

  1. 使用Tidy將其解析爲XML文檔。
  2. 使用XSLT樣式表(http://pastebin.com/s45gRTKy)隱蔽 XML轉換爲FO文檔
  3. 使用Apache FOP轉換從FO到PDF文檔。

我面對的問題只是我的HTML文檔的第一頁正在轉換爲PDF。我看到的是警告信息 -

Mar 2, 2013 2:53:06 PM org.apache.fop.events.LoggingEventListener processEvent WARNING: Content overflows the viewport of an fo:block-container in block-progression direction by 350 millipoints. Content will be clipped. (See position 51:261)

我敢肯定,這個問題是在我使用XSL FO樣式表。但是,即使在此樣式表中添加/修改了很多變量之後,我仍無法將第二頁顯示爲可見。任何人都可以請幫我嗎?

鏈接到我想要轉換成PDF的HTML - pastebin.com/iBLw8Pbv

回答

1

你使用Apache FOP建立一個PDF。閱讀本非常重要的注意事項在xsl:

由於這個樣式表最初由天線樓設計爲與XSL的格式化使用 ,它可能無法與另一個XSL-FO 處理器兼容。

您可能會被迫使用天線,你期望一個不錯的輸出。如果你能得到一個二進制文件,下面的腳本可能會有所幫助(Ubuntu)。如果您仍然使用xsl:<nobr>不在xsl中......請在您的HTML中將其替換爲<pre>。另一個問題是,整潔似乎並沒有修復結束引號,並會產生很多關於@ids(@ @ @ @ @會包含@class)的警告。

我不知道如何解決這個問題。我沒有FOP我的類路徑中,所以我需要這樣的:

javac -cp .:/usr/share/java/fop.jar:/usr/share/java/jtidy.jar Html2PDF.java 
java -cp .:/usr/share/java/fop.jar:/usr/share/java/jtidy.jar Html2PDF samplehtml.txt xhtml2fo.xsl 

而當你調試我寫了這個簡單的腳本,將有很大的幫助:

# remove broken IDs 
sed "s/id=\"[^\"]* //g" samplehtml.txt > samplehtml.txt.fixedID 

# use tidy 
tidy -utf8 -w 255 -indent -quiet -asxhtml <samplehtml.txt.fixedID> samplehtml.txt.tidy 

# change 
# - &nbsp; to &$160; 
# - remove xmlns declaration 
# - <nobr to <pre ;; </nobr to </pre 
sed -e "s/nbsp/#160/g;s/<html [^>]*/<html/;s/<nobr/<pre/g;s/<\/nobr/<\/pre/g" samplehtml.txt.tidy > samplehtml.txt.tidy2 
xalan -xsl xhtml2fo.xsl -in samplehtml.txt.tidy2 -out res.fo 
fop res.fo res.pdf 

編輯:我發現了一個整潔的項目這就是你所需要的,而且輸出看起來很棒。 https://code.google.com/p/wkhtmltopdf/

+0

非常感謝您的回覆。這有幫助! – Krishna 2013-03-04 06:39:08

+0

不客氣!我希望你明白。我今天也發現了這個,並且實際上使用了複雜的html文件:https://code.google.com/p/wkhtmltopdf/ – ljdelight 2013-03-04 06:55:50