2009-12-30 77 views
5

在參照先前的帖子(PDF Report generation將HTML轉換成PDF

我決定使用類似的解決方案,以http://www.alistapart.com/articles/boom

對於那些你不想讀任何參考誰 - 我創建報告並將其作爲PDF使用。我決定使用.NET去HTML - > PDF路線。

因此,假設我得到的HTML文件完全像我想要的那樣。將所述頁面轉換爲PDF的最佳方式是什麼?實質上,我希望用戶在HTML中看到「預覽」,然後能夠將所述頁面轉換爲PDF。我目前正在試驗的圖書館是ABCPdf。

我的第一個想法是將頁面保存到文件系統,並在頁面上的事件處理程序期間在轉換例程中引用它的URL。這有問題,因爲每次渲染準備打印時都必須保存頁面。其實,它似乎只是回傳。

我的下一個想法是使用頁面的渲染方法來捕獲頁面作爲字節流並使用它(因爲ABCPdf支持轉換HTML流。)如果這是我的答案,我迷失在如何實際拉它關了。有一個「打印」按鈕是處理程序做一個Me.Render()字節流並將其發送到轉換例程?這甚至有可能嗎?

底線 - 一旦頁面以漂亮的HTML呈現,您如何初始化轉換爲該頁面的PDF?變通辦法和其他解決方案是受歡迎的。

我希望我失去了一些東西很明顯,因爲這一定是「容易的部分

+1

另外,我正在將這個頁面的HTML模板保存在數據庫中,並以編程方式填充數據。這樣,我就擁有了HTML,我可以隨心所欲地執行任何操作(渲染到屏幕或轉換) – IniTech 2009-12-30 18:13:35

回答

3

好吧,讓它工作 - 它很簡單。只要把它傳給下一個可能需要答案的人。我只是使用頁面的Url屬性並將其發送給ABCPdf addImageUrl()方法。也不得不使用鏈接,因爲它不止一頁。感謝所有的幫助。

Dim oPdfDoc As New Doc() 
Dim iPageID As Int32 
Dim MyUrl = Request.Url 

iPageID = oPdfDoc.AddImageUrl(MyUrl.AbsoluteUri) 

While True 
    oPdfDoc.FrameRect() 
    If Not oPdfDoc.Chainable(iPageID) Then 
     Exit While 
    End If 
    oPdfDoc.Page = oPdfDoc.AddPage() 
    iPageID = oPdfDoc.AddImageToChain(iPageID) 
End While 

For i as Int32 = 1 To oPdfDoc.PageCount 
    oPdfDoc.PageNumber = i 
    oPdfDoc.Flatten() 
Next 

oPdfDoc.Save(Server.MapPath("test.pdf")) 
oPdfDoc.Clear() 
-2

如何從C#做呢?你不(直接)。

產生工作者PRINCE.EXE過程可能是您唯一的選擇。

PRINCE.EXE將從HTML「標準輸入」讀取/寫入數據並將PDF發送到「標準輸出」。使用命令行「%dir%\ PRINCE - 」而不輸出文件名。

你可能會發現你需要一個單獨的COM組件來產生PRINCE,因爲System.Management類可能不適合你。使用Visual Basic或C++來製作COM組件。

將HTML放入數據庫通常是一個糟糕的主意,但對您而言可能沒問題,因爲它聽起來像是基本上是靜態的。

編輯

改變 「孩子PRINCE.EXE」 到 「工人PRINCE.EXE過程」。我有一個有趣的感覺,PRINCE.EXE需要不是一個子進程。