2011-08-09 29 views
0

我有一個三頁的Word文檔需要轉換爲PDF。這個Word文檔是作爲一個模板給我看的,它告訴我PDF輸出應該是什麼樣子。我試圖將該文檔轉換爲PDF,創建PDF表單並使用iTextSharp打開表單,填充數據並將其返回給客戶端。這非常棒,但由於存儲了大量數據,佔位符不足,文本會被截斷或隱藏。將大量的文本和動態數據轉換爲PDF

我的第二次嘗試是創建一個沒有母版頁的MVC 2視圖,將模型傳遞給視圖,將視圖的HTML表示形式傳遞給iTextSharp並呈現PDF。這裏的問題是iTextSharp在某些標籤上失敗(其中一個是<hr>標籤)。我設法擺脫了有問題的標籤,但是表格沒有正確渲染。也就是說,邊界屬性被忽略了,所以我結束了無邊界表。該嘗試失敗。

我需要一個建議或建議,以最有效的方式在MVC 2中創建一個PDF文檔,從長遠來看這個文檔是可以維護的。我真的不希望我的行爲長達200多行。直接使用Word文檔不是最好的解決方案,因爲我從未使用過VSTO,所以我不太清楚打開Wo​​rd並操作其中的文本並添加動態數據然後將其動態轉換爲PDF 。

任何建議是非常受歡迎的。

此致敬禮!

+0

也許不是一個答案,但要探索的東西可能是pdf.js:https://github.com/andreasgal/pdf.js/ –

+0

嗨賈斯汀,感謝您的答覆。但是,這個原型利用了HTML 5的功能。我正在編寫的應用程序將可供公衆使用,因此需要支持不同的(讀取較舊的:))瀏覽器。 –

+1

我聽到你的聲音。無論我處理哪種語言,生成PDF都是最糟糕的。祝你好運:-) –

回答

2

一件事是將Word文件保存爲DOCX並解壓縮它,因爲DOCX僅僅是一個重命名的ZIP文件。在檔案中打開/word/document.xml,你會看到你的文檔。那裏有很多奇怪的XML標籤,但總體而言,您應該對內容的位置有個很好的瞭解。然後只需添加如{FIRST_NAME}的佔位符文本,保存文件並重新壓縮。

然後從代碼中,您可以執行相同的步驟,解壓縮如SharpZipLibDotNetZip,交換佔位符副本,重新壓縮,然後使用非常s imple Word automation to Save-As a PDF

另一條路線是充分利用iTextSharp的,實際上寫ParagraphsPdfPTable和一切。它需要更長的時間來設置,但會給你最大的控制。

+0

+1,Word自動化簡單易用。但是存在的問題很少,它非常緩慢且資源密集。 –

+0

@Chris,謝謝你的建議。我會對這種方法進行一些思考。不過,我有點擔心我可能會用iTextSharp並從最底層重建三頁文檔。就是我想要避免的事情。 –

+0

@Huske,從頭開始構建並不像聽起來習慣iTextSharp那樣糟糕。它有時也有助於瀏覽源代碼。如果你有任何問題,絕對可以提出任何問題! –

0

問:你說「......但由於存儲了大量數據,佔位符不足,文本會被截斷或隱藏」 你怎麼會得到大量數據?如果單詞模板可以「保存」3頁中的數據,則它們應該放在3個PDF頁面中。 我曾經使用iTextSharp來創建我的PDF,但我也幾乎總是從頭開始自己編寫PDF文檔(不是真的是< 200行解決方案)你有沒有考慮另一個庫,我最近切換到MigraDoc的PDFSharp.Way更簡單用那麼iText的,lotsa例子/ docus

只是我的兩分錢,我在過去所做的那樣

+0

感謝您的回覆。在iTextSharp之前我看到了PDFSharp,但後者證明功能更豐富。我承認,使用MigraDoc的解決方案比iTextSharp更容易編程。 –

0

Word文檔對象模型很容易理解。它將包含一系列的段落或表格。使用Open XML SDK,您可以迭代word文檔中的每個段落/表格並檢索它的內容和樣式。然後,您可以使用檢索到的信息即時生成PDF文檔。這也將在MVC下工作。

但是如果你的Word文檔包含複雜的元素,那麼基於這種方法需要更多的時間來實現。此外,這種方法只適用於(Word 2007和2010)文件。

此外,據我所知,ITextSharp庫中當前可用的HTML to PDF選項只能使用已知的標記集。

另一個建議是利用商業上可用的.NET組件。有很多好的解決方案可用。例如:Syncfusion

+0

我嘗試了HTML到PDF,但它在某些點保持失敗,並且不識別表標記的邊界屬性。 –