NReco PDF在Azure上有黑色方块

时间:2014-09-11 16:48:20

标签: c# pdf azure wkhtmltopdf

我使用NReco在Azure上生成PDF,它使用WkHtmlToPdf。在我的本地服务器上,一切都很好。但是在Azure上,它会渲染所有带有黑色方块的字体。

enter image description here

我已经尝试过在网上找到的所有内容。

这是我的HTML:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style type="text/css">
        @@font-face {
            font-family: "FreeSerif";
            src: url(@(HttpContext.Current.Server.MapPath("~/Content/FreeSerif.ttf"))) format("truetype");
        }

        * {
            font-family:"FreeSerif", Helvetica, Arial, sans-serif;color:black;
        }
    </style>
</head>

我也尝试过使用Url.Content("~/Content/FreeSerif.ttf")

我的C#:

string htmlText = RenderPartialViewToString("~/Views/Templates/PDF/ListPDFView.cshtml", pdfList);

HtmlToPdfConverter nPdf = new HtmlToPdfConverter();
nPdf.Size = PageSize.Letter;
nPdf.Orientation = PageOrientation.Landscape;
nPdf.CustomWkHtmlArgs = "--encoding UTF-8";

pdfBuf = nPdf.GeneratePdf(htmlText);

Response.ContentType = "application/pdf";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("Content-Disposition", "Inline; filename=file.pdf");
Response.BinaryWrite(pdfBuf);
Response.Flush();
Response.End();

我的web.config包含:

<system.webServer>
    <staticContent>
        <remove fileExtension=".ttf" />
        <remove fileExtension=".svg" />
        <remove fileExtension=".eot" />
        <remove fileExtension=".woff" />
        <mimeMap fileExtension=".ttf" mimeType="font/truetype" />
        <mimeMap fileExtension=".svg" mimeType="image/svg+xml"  />
        <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
        <mimeMap fileExtension=".woff" mimeType="application/x-woff" />
    </staticContent>
</system.webServer>

每种解决方案都会产生黑色方块。我在这里结束了我的智慧。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

如果Azure意味着&#34; Azure网站&#34;遗憾的是,WkHtmlToPdf不支持它,这是NReco.PdfGenerator page上提到的FAQ部分。 在您的情况下,似乎生成的PDF没有错误,但出现黑色方块,因为WkHtmlToPdf使用的Windows GDI API在Azure WebSites中不起作用。

然而,PdfGenerator应该可以很好地用于Azure WebRole或Azure VM。 在这种情况下,Amazon EC2 T2微实例也是Azure WebSites的不错选择。

---更新---

目前Azure Apps(以前的网站)有基于虚拟机的订阅(所有计划除了&#34;免费&#34;和#34;共享&#34;),限制较少的托管环境允许wkhtmltopdf执行和NReco PdfGenerator在这种情况下可以使用包装器。请注意,仍然存在一些限制:例如,不呈现自定义字体(只能使用系统安装的字体)。

答案 1 :(得分:0)

我有一个类似的问题要解决这个问题,必须创建一个云服务azure来生成pdf报告。创建云服务并正确生成pdf与我在案例中声明的每个样式我使用旋转并正在努力完善留下一些链接,以便您可以看到如何为云服务创建项目azure

Cloud Services Example

https://www.visualstudio.com/en-us/docs/release/examples/azure/net-to-azure-cloud-services

https://github.com/Microsoft/nodejstools/wiki/Azure-Cloud-Service-Projects

相关问题