I am converting HTML into a PDF. This works locally without any issue.
When deployed to the site, I get the following error:
Application ID: /LM/W3SVC/2144249568/ROOT
Process ID: 612
Exception: System.IO.FileNotFoundException
Message: Could not load file or assembly 'Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
StackTrace: at Spire.Pdf.HtmlConverter.HtmlConverter.ᜀ(String A_0, ImageType A_1, Int32 A_2)
at Spire.Pdf.HtmlConverter.HtmlConverter.Convert(String url, ImageType type, Int32 width, Int32 height, AspectRatio aspectRatio)
at Spire.Pdf.PdfSection.ᜀ(String A_0, Boolean A_1, Boolean A_2, Boolean A_3, PdfHtmlLayoutFormat A_4)
at Spire.Pdf.PdfDocument.LoadFromHTML(String Url, Boolean enableJavaScript, Boolean enableHyperlinks, Boolean autoDetectPageBreak, PdfPageSettings setting, PdfHtmlLayoutFormat layoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(String Url, Boolean enableJavaScript, Boolean enableHyperlinks, Boolean autoDetectPageBreak)
at FSMG.Controllers.GeneratedReportsController.<>c__DisplayClass3f.<ViewPdf>b__3c()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()</Data></EventData></Event><Event><System><Provider Name=".NET Runtime"/><EventID>1026</EventID><Level>0</Level><Task>0</Task><Keywords>Keywords</Keywords><TimeCreated SystemTime="2015-02-12T01:47:00Z"/><EventRecordID>566505578</EventRecordID><Channel>Application</Channel><Computer>RD00155D50D3A9</Computer><Security/></System><EventData><Data>Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
Stack:
at Spire.Pdf.HtmlConverter.HtmlConverter.ᜀ(System.String, Spire.Pdf.HtmlConverter.ImageType, Int32)
at Spire.Pdf.HtmlConverter.HtmlConverter.Convert(System.String, Spire.Pdf.HtmlConverter.ImageType, Int32, Int32, Spire.Pdf.HtmlConverter.AspectRatio)
at Spire.Pdf.PdfSection.ᜀ(System.String, Boolean, Boolean, Boolean, Spire.Pdf.HtmlConverter.PdfHtmlLayoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(System.String, Boolean, Boolean, Boolean, Spire.Pdf.PdfPageSettings, Spire.Pdf.HtmlConverter.PdfHtmlLayoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(System.String, Boolean, Boolean, Boolean)
at FSMG.Controllers.GeneratedReportsController+<>c__DisplayClass3f.<ViewPdf>b__3c()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
I continue to get the error after adding a reference to Microsoft.mshtml, even though Embed Interop Types is set to true.
When I copy the DLL into the bin and deploy, I get the following error:
Application ID: /LM/W3SVC/2144249568/ROOT
Process ID: 13084
Exception: System.Runtime.InteropServices.COMException
Message: Error HRESULT E_FAIL has been returned from a call to a COM component.
StackTrace: at System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
at System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
at System.Windows.Forms.WebBrowser.PerformNavigateHelper(String urlString, Boolean newWindow, String targetFrameName, Byte[] postData, String headers)
at System.Windows.Forms.WebBrowser.Navigate(String urlString, Boolean newWindow)
at Spire.Pdf.HtmlConverter.HtmlConverter.ᜆ()
at Spire.Pdf.HtmlConverter.HtmlConverter.ᜀ(String A_0, ImageType A_1, Int32 A_2)
at Spire.Pdf.HtmlConverter.HtmlConverter.Convert(String url, ImageType type, Int32 width, Int32 height, AspectRatio aspectRatio)
at Spire.Pdf.PdfSection.ᜀ(String A_0, Boolean A_1, Boolean A_2, Boolean A_3, PdfHtmlLayoutFormat A_4)
at Spire.Pdf.PdfDocument.LoadFromHTML(String Url, Boolean enableJavaScript, Boolean enableHyperlinks, Boolean autoDetectPageBreak, PdfPageSettings setting, PdfHtmlLayoutFormat layoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(String Url, Boolean enableJavaScript, Boolean enableHyperlinks, Boolean autoDetectPageBreak)
at FSMG.Controllers.GeneratedReportsController.<>c__DisplayClass3f.<ViewPdf>b__3c()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()</Data></EventData></Event><Event><System><Provider Name=".NET Runtime"/><EventID>1026</EventID><Level>0</Level><Task>0</Task><Keywords>Keywords</Keywords><TimeCreated SystemTime="2015-02-12T01:44:58Z"/><EventRecordID>566383796</EventRecordID><Channel>Application</Channel><Computer>RD00155D50D3A9</Computer><Security/></System><EventData><Data>Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.InteropServices.COMException
Stack:
at System.Windows.Forms.WebBrowser.PerformNavigate2(System.Object ByRef, System.Object ByRef, System.Object ByRef, System.Object ByRef, System.Object ByRef)
at System.Windows.Forms.WebBrowser.PerformNavigateHelper(System.String, Boolean, System.String, Byte[], System.String)
at System.Windows.Forms.WebBrowser.Navigate(System.String, Boolean)
at Spire.Pdf.HtmlConverter.HtmlConverter.ᜆ()
at Spire.Pdf.HtmlConverter.HtmlConverter.ᜀ(System.String, Spire.Pdf.HtmlConverter.ImageType, Int32)
at Spire.Pdf.HtmlConverter.HtmlConverter.Convert(System.String, Spire.Pdf.HtmlConverter.ImageType, Int32, Int32, Spire.Pdf.HtmlConverter.AspectRatio)
at Spire.Pdf.PdfSection.ᜀ(System.String, Boolean, Boolean, Boolean, Spire.Pdf.HtmlConverter.PdfHtmlLayoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(System.String, Boolean, Boolean, Boolean, Spire.Pdf.PdfPageSettings, Spire.Pdf.HtmlConverter.PdfHtmlLayoutFormat)
at Spire.Pdf.PdfDocument.LoadFromHTML(System.String, Boolean, Boolean, Boolean)
at FSMG.Controllers.GeneratedReportsController+<>c__DisplayClass3f.<ViewPdf>b__3c()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
Here is the code:
- Code: Select all
PdfDocument doc = new PdfDocument();
String url = path;
Thread thread = new Thread(() =>
{
doc.LoadFromHTML(url, false, true, true);
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
if (!IsBgNull)
{
var imgStr = new MemoryStream(bgImagePath);
var img = Image.FromStream(imgStr);
imgStr.Position = 0;
foreach (PdfPageBase page in doc.Pages)
{
page.BackgroundImage = img;
}
imgStr.Dispose();
}
var ms = new MemoryStream();
doc.SaveToStream(ms, FileFormat.PDF);
doc.Close();