2010-06-11 58 views
0

我想確定是否MY xsl:fo生成的PDF文件將超過一頁,而不實際生成輸出。我們在我們的服務器上使用Apache-FOP 0.95,並且在傳遞到XSL-FO模板之前使用PHP DOMDocument類生成XML數據。是否存在xsl:fo reporting或xsl:fo仿真這樣的事情?

我的問題:

是否有PHP庫在那裏,可以模擬XSL:FO輸出,並給我報告,我可以在我的應用程序中使用?

另外,有沒有辦法讓Apache FOP本身(或同級Java應用程序)發送報告而不實際生成文件?我一直在閱讀FOP文檔,除了一些我不能完全理解的內容之外,我一直無法從FOP中找到一種方法。

回答

2

如果沒有通過佈局引擎實際運行文檔,則不可能「模擬」文檔。另外,不同的FO處理器可能會產生稍微不同的輸出,因此您不能依賴一個人猜測另一個頁面的數量。

您可以用Apache FOP 0.95做些什麼,例如生成所謂的Area Tree XML (or intermediate format),它基本上將佈局結果輸出爲XML文件而不是PDF。然後可以使用XPath(或XSLT)檢查該XML文件以確定頁面的數量。 XML格式沒有正式描述,但您很快就會看到如何確定頁面數量。因此,通過在命令行中使用「-at application/pdf simulation.xml」而不是「-pdf output.pdf」,可以生成該XML格式。當然,在這種情況下,生成最終文檔所需的大部分處理工作都需要完成,因此爲PDF生成重新運行整個文檔將花費相當長的時間。好消息是,您可以再次使用AT XML作爲輸入來生成最終的PDF,因此佈局階段不必再次運行(請參閱文檔中的「-atin」參數)。

當然,另一種可能性是僅使用PDF工具來確定最終文檔的頁數。

HTH

+0

感謝您的意見,Jeremias。我試圖避免生成一個真實的文件。當我瀏覽大部分文檔時,看起來我沒有選擇,只能生成一個真實文件並使用FOP的大內存消耗。 你會建議用什麼PDF工具來計數頁面?我正在考慮使用fpdi(http://www.setasign.de/products/pdf-php-solutions/fpdi/)。 – topmulch 2010-06-12 12:04:56

+0

我不自己做PHP,所以我不能推薦任何PHP特定的。 FOP本身可以報告它生成的頁面數量。但是這需要使用Java代碼與FOP進行交互。 – 2010-07-01 06:31:10

相關問題