2

使用 Rotativa,一个 wkhtmltopdf 的 .net 包装器。如果我通过 HTTPS 连接,我无法在 PDF 中呈现 CSS 或图像。我之前使用 HTTPS(SSL)在 2008r2 iis7 服务器上设置了这个我确实遇到了 css 和 webfonts 的类似问题,但我只是将所有路径更改为绝对路径并且它有效。

该作业部署在 ii6 windows 2003 服务器上。昨天它只是产生“发生了未处理的异常”。使用 HTTPS 时,我将 wkhtmltopdf 升级到 V 0.12.0,现在 PDF 将使用 ViewAsPdf 生成,没有 CSS 或图像。并使用 ActionAsPdf 呈现“您无权查看此页面”错误的 PDF。但是,如果我关闭 HTTPS,它会按应有的方式呈现。

我添加了一些测试操作结果、一个视图和一个视图布局,只是为了隔离问题。

我确定它与绝对路径无关。这是我在 _TestCssFromPath.cshtml 视图布局的标题中尝试的 5 种绝对路径组合方式,它们都可以在非 HTTPS 下工作

_TestCssFromPath.cshtml:

@{string serverUrl = string.Format(@"{0}://{1}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority);}
   <link href="@String.Format("{0}/Content/TestPdf.css",serverUrl )" rel="stylesheet" />
   <link href="@serverUrl/Content/TestPdf.css" rel="stylesheet" />
@{
 var path = VirtualPathUtility.ToAbsolute("~/Content/TestPdf.css");
 var url = new Uri(Request.Url, path).AbsoluteUri;
}
   <link href="@Href("~/Content/TestPdf.css")" rel="stylesheet" />   
   <link href="c:/serverPath/ToSite/Content/TestPdf.css" rel="stylesheet" />
   <link href="c:\serverPath\ToSite\Content\TestPdf.css" rel="stylesheet" />

_TestInlineCss.cshtml:只是将内容从 .css 中取出,这确实可以正确呈现 CSS,没有图像或 webfonts。

家庭控制器:

    public virtual ActionResult TestViewAsPdf(int id) {
        if (id == 1) { ViewBag.Layout = "~/Views/Shared/_TestInlineCss.cshtml"; }
        if (id == 2) { ViewBag.Layout = "~/Views/Shared/_TestCssFromPath.cshtml"; }
        return new ViewAsPdf("PDF") { FileName = string.Format("test_PDF_{0}_{1:yyyyMMddHHmm}.pdf", id, DateTime.Now) };
    }
    public virtual ActionResult TestActionAsPdf(int id) {
        return new ActionAsPdf("pdfView", new { id = id }) { FileName = string.Format("test_PDF2_{0}_{1:yyyyMMddHHmm}.pdf", id, DateTime.Now) };
    }
    public virtual ActionResult pdfView(int id) {
        if (id == 1) { ViewBag.Layout = "~/Views/Shared/_TestInlineCss.cshtml"; }
        if (id == 2) { ViewBag.Layout = "~/Views/Shared/_TestCssFromPath.cshtml"; }
        return View("PDF");
    }

PDF.cshtml

@{
    ViewBag.Title = "PDF";
    if (ViewBag.Layout != null) { Layout = ViewBag.Layout; }
}
<h2>PDF</h2>

访问以下 URL 会产生以下结果:

  • /Home/TestViewAsPdf/1 ------> CSS 有效(只要它已经在 html 中),没有图像
  • /Home/TestViewAsPdf/2 ------> 没有 CSS,没有图像
  • /Home/TestActionAsPdf/1 ---->“您无权查看此页面”的 PDF
  • /Home/TestActionAsPdf/2 ---->“您无权查看此页面”的 PDF

我已经通过了文件夹权限,它们接缝很好......我错过了什么?

4

0 回答 0