GDI +中发生了一般错误。在Azure Webapp上

时间:2016-04-06 05:31:38

标签: c# asp.net-mvc azure azure-web-sites spire.doc

我正在使用spire lib为用户创建pdf文件。

    string userId = User.Identity.GetUserId();
        User trainee = _userDAL.GetUserByIdentityId(userId);

        // Get the Employee scores
        string fileNameTemplate = Server.MapPath(Url.Content("~/assets/cert1-{0}-{1}.docx"));
        string nnn = string.Format("cert1-{0}-{1}.pdf", trainee.StaffID, DateTime.Now.Millisecond);
        string serverPath = MainConfig.P_EXPORT;
        var folder = Server.MapPath(serverPath);

使用(Document document_test = new Document())             {  document_test.LoadFromFile(fileNameTemplate);

            //Update Text of Title
            document_test.Replace("#trainee_name#", trainee.Name, false, true);
            document_test.Replace("#course_name#", "Test", false, true);
            document_test.Replace("#date_info#", DateTime.Today.ToShortDateString(), false, true);

            document_test.SaveToFile(nnn, Spire.Doc.FileFormat.PDF, System.Web.HttpContext.Current.Response, HttpContentType.Attachment);
        }

代码在本地开发机器上运行良好,但是当我将其上传到Azure Web应用程序时,我得到一个通用错误:GDI +中发生了一般错误。

堆栈追踪:

[ExternalException(0x80004005):GDI +中发生一般错误。]    System.Drawing.Imaging.Metafile..ctor(Stream stream,IntPtr referenceHdc,RectangleF frameRect,MetafileFrameUnit frameUnit,EmfType type,String description)+226801    System.Drawing.Imaging.Metafile..ctor(Stream stream,IntPtr referenceHdc,RectangleF frameRect,MetafileFrameUnit frameUnit,EmfType type)+34    sprᲦ.ᜀ(PageSetup A_0,ImageType A_1,MemoryStream A_2,Int32 A_3,GraphicsUnit A_4)+255    sprᲦ.ᜀ(PageSetup A_0,ImageType A_1,MemoryStream A_2,Int32 A_3)+19    sprᲦ.᜔()+ 224    sprᲦ.ᜁ(IDocument A_0)+234    spr᧤.ᜀ(文件A_0)+93    Spire.Doc.Document。ᜀ(流A_0)+94    Spire.Doc.Document.SaveToFile(Stream stream,FileFormat fileFormat)+289    Spire.Doc.Document.SaveToFile(String fileName,FileFormat fileFormat,HttpResponse response,HttpContentType contentType)+673    LMSv1.Controllers.DisplayController.DownloadCertification(Nullable 1 tid, Nullable 1 eid)+616    lambda_method(Closure,ControllerBase,Object [])+ 146    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object []参数)+14    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary 2 parameters) +167 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2个参数)+27    System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult,ActionInvocation innerInvokeState)+22    System.Web.Mvc.Async.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase 1.End()+49

4 个答案:

答案 0 :(得分:2)

Azure Web Apps运行的沙箱有一些阻止某些调用的限制,这可能是您在使用GDI +时遇到的问题。

您可以在https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#win32ksys-user32gdi32-restrictions上找到有关这些沙箱限制的更多信息。

答案 1 :(得分:2)

似乎已使用以下代码解决了此问题。请参阅类似的帖子和解决方案here

MainPage = new NavigationPage(new MainPage());

答案 2 :(得分:0)

粗略猜测:您隐式引用安装在GAC中的其他dll或未设置为复制本地的dll。因此,虽然大部分已编译的代码都部署到Azure,但是这个神秘的dll并没有部署到azure。

答案 3 :(得分:0)

另一个暗中猜测:也许在http://www.e-iceblue.com/Introduce/free-pdf-component.html检查文档,看看在Azure中运行时是否存在任何已知问题。