Fenriswolf 程式筆記

奮利斯狼的地盤,小綿羊勿入

用 Ant 建立 Docbook 文件 – 解決 FOP 的 bug

Docbook Framework 是用 FOP 0.20.5 的版本來產生 pdf 檔案
簡單的測試基本上不會有問題,但是文件的量及結講一但大到某一個程度
常常會發生 FOP 的錯誤訊息

"The ID d0e2346 already exists in the document"

遇到這個問題前要先確認 FOP 的 input xml 內沒有重覆的 id
如果沒有重覆但還是發生這個錯誤,那就是碰到 FOP 的 bug,解決的方式有兩種
1. 改用 FOP 1.0,但是測試發現會產生其他類型的錯誤
2. 直接修改 FOP 0.20.5 的程式碼,也是我現在要介紹的方式

改寫 org.apache.fop.datatypes.IDReferences.java,compile 後更新到 fop-0.20.5.jar 裡
可以下載我提供的 fop.jar 0.20.5 版或自行修改 IDReferences.java
把原本會 throw FOPException 的部分改掉(大約是第 57 行)

if(doesIDExist(id)) {
    removeFromUnvalidatedIDList(id);
}

要注意的是這只是一個簡單的解法,並不保証不會產生其他的問題
如果文件格式不是非常特殊應該是夠用了
 
 
執行環境
JDK 1.6.0_23
Velocity Docbook Framework 1.0
Xerces-2.11

參考資料
XMLmind
Velocity Docbook Framework
Xerces
DocBook: Write Once, Read Anywhere Documentation

程式下載
fop-0.20.5-fenris.jar

廣告

2012/03/21 - Posted by | Java Tool | ,

仍無迴響。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: