2012-04-16 31 views
4

我在我的項目中使用WkHtmlToXSharp包裝庫來從HTML生成PDF文件。WkHtmlToXSharp - System.AccessViolationException

我使用這個庫有很多次在不同的PC和,突然間,我碰到下面的問題就來了:

System.AccessViolationException:嘗試讀取或寫入受保護的內存。這通常表明其他內存已損壞。在WkHtmlToXSharp.WkHtmlToPdfConverter上的WkHtmlToXSharp.WkHtmlToPdfConverter.wkhtmltopdf_convert(IntPtr轉換器) 處的 。 轉換(字符串inputHtml) 在WkHtmlToXSharp.WkHtmlToPdfConverter.Convert() 在WkHtmlToXSharp.MultiplexingConverter.b _8()內部異常堆棧跟蹤的 --- ---結束在 Sanford.Threading.DelegateQueue.EndInvoke(IAsyncResult的結果) 在Sanford.Threading.DelegateQueue.Invoke(委派方法,對象[]參數) 在WkHtmlToXSharp.MultiplexingConverter.Convert()

這似乎是與此庫的一個常見問題(我已經發現了一些在網上反饋有關它 - 但是沒有提供修復)。順便說一句,在我的情況下,它有點隨機發生。我在其他開發機器上沒有遇到這個問題。我想知道有人是否有解決的辦法。我也想知道這是否與包裝庫有關,如果使用WkHtmlToPDF庫本身。

有什麼建議嗎?我也願意使用其他轉換器,只要它是自由穩定的,並且如果可能的話,不會產生新的流程。它必須在所有Windows版本中正常和穩定地工作,並進行體面的工作轉換(要轉換的HTML是固定的 - 包含一些圖片和表格以及基本的CSS)。

回答

3

我會建議一個替代路線:直接使用wkhtmltopdf.exe,建立自己的包裝。如果你控制了輸入,那麼它們並不是很複雜,然後你就知道如何更新它以及選項如何工作。直接使用wkhtmltopdf時(Win7,Win server 2008 r2,Ubuntu和CentOS),我從來沒遇到過這個問題。儘管他們爲每次轉換都會產生進程。

例如,查看關於wkhtmltopdf的Derp class in another answer of mine。或者嘗試下面未經測試的代碼(您的真實代碼會更復雜,這只是一個演示/ POC)。

var pi = new ProcessStartInfo(@"c:\wkhtmltopdf\wkhtmltopdf.exe"); 
pi.CreateNoWindow = true; 
pi.UseShellExecute = false; 
pi.WorkingDirectory = @"c:\wkhtmltopdf\"; 
pi.Arguments = "http://www.google.com gogl.pdf"; 

using (var process = Process.Start(pi)) 
{ 
    process.WaitForExit(99999); 
    Debug.WriteLine(process.ExitCode); 
} 
+0

事實上,我最終這樣做了。這是我相信這將是正確的答案無論如何,至少目前的藝術狀態WkHtmlToPdf/WkHtmlToXSharp – 2012-08-17 12:19:19

+0

@Nenotlep,這是絕對容易直接使用wkhtmltopdf.exe,但對於大量的同時請求我得到我的系統處於停止狀態。有什麼方法可以在後臺調用這個執行嗎? – user3163213 2014-09-01 07:48:02

+0

@ user3163213如果你有這個問題,我會建立一個排隊系統。這確實意味着,如果您通過瀏覽器直接向用戶發送PDF,則必須找到替代方式(附加到電子郵件,通過電子郵件發送鏈接等)。 – Nenotlep 2014-09-01 08:08:44

相關問題