2011-05-01 68 views
1

我們需要創建一個包含模型數據一部分的pdf或doc文檔。每個模型對象都包含單個值以及少量相關數據的集合,它們的長度各不相同。現在,可以禁用模型數據的某些部分,以便它們不應包含在最終文檔中。我需要一個聰明的方法來創建一個使用模型數據的唯一選擇部分文檔,我不慣於遇到這樣的混亂:用java創建(複雜的?)doc/pdf文檔 - 最好的方法是什麼?

if (DATA_TITLE is selected) 
    add DATA_TITLE to document 
if (DATA_AUTHOR is selected) 
    add DATA_TITLE to document 
etc.. 

我怎樣才能避免這種情況在一個優雅的方式?

另一件事:目前我想用「編程方式」創建文檔,例如使用Apache POI lib。但是,也許還有其他一些方法,我可以使用文檔模板並使用EL表達式來填充數據,從而使用帶有模板的$ {data.author}字段。但是,如何管理這個事實,並不是所有的數據元素都可以被選擇用於文檔輸出,並且相關數據的集合可以具有不同的長度。

我需要你的寶貴知識:)

回答

2

您可以使用XSL-FO的轉換,如果你不希望以編程方式做到這一點。

我仍然推薦iText。

1

要回答你的第一個問題,我會使用Observer設計模式,以更新,只有當受影響的字段以編程方式更改文檔模型。

關於第二個問題,如果你使用的文檔模型一個觀察者,你可以簡單地爲您的領域,因爲這隻會通過你的代碼到你的觀察活動中更改的默認實現。

退房的模式:Observer Pattern

+0

我真的不知道我在那裏應該堅持的圖案來。我其實不確定我們是否理解了我們的正確。模型數據是書籍的集合。這些書籍具有描述它們的各種數據,如作者,標題等。用戶通過網絡界面選擇哪些書籍描述的部分應該包括在導出的文檔中。目前,我有一份所有書籍的排序清單,如果選擇了書籍說明部分,我可以用'book.hasPart(PART_NAME)'查看。現在我需要將所有這些數據放入pdf或doc文檔:)那麼,您的TIP與觀察者模式仍然有效? – user1293910asd 2011-05-01 18:29:42

+0

我會爲您的代碼添加一個觀察者,以監聽用戶選擇應包含的內容。當選擇/取消選擇時,觀察者可以找到有問題的書(Map實現集合可能是最好的),並相應地更新變量。 – Zach 2011-05-01 18:39:58

相關問題