0

我编写的网站需要将网页转换为 PDF 功能。在查看了选项 HiQPdf 看起来是最好的选项并完成了所有需要的操作后,目前我正在使用免费版本,直到测试完成。

因此,按照说明,我创建了网页并将其传递给 PDF 创建器以及一个位置,以查找所有链接项目(主要是 css)。代码去

var model = new SomeKindOfModel
{
    SetSomeStuff = stuff
};

string htmlToConvert = RenderRazorViews.RenderViewAsString(ControllerContext, "Print", model);
string baseUri = $"{Request.Url.Scheme}://{Request.Url.Authority}";

HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlToConvert, baseUri);

return new FileContentResult(pdfBuffer, "application/pdf");

相当标准的代码。

现在,当我从 Visual Studio 运行它时,它可以正常工作,生成的 pdf 看起来正确,一切都在正确的位置。当我发布到计算机上的文件系统时,它工作正常。当我将上述文件复制到另一台笔记本电脑并通过它的 ipAddress 访问它时,它工作正常。

当我使用 web 部署包将其放在主测试服务器上时,会出现问题。此时pdf已创建,文本在那里,但没有样式,一切都是白底黑字。如果我在 cshtml 文件中包含一些样式,那么就会被拾取。网站上的其他所有内容都可以正常工作。我已将本地 site.css 添加到引导程序包中,但它们都没有被拾取

我认为该string baseUri行没有将 pdf 创建者指向正确的位置,但我查看了变量中的内容并尝试了许多不同的变体,但没有任何效果。

我查看了中的文字,htmlToConvert看起来正确,链接似乎指向正确的方向。

即使将链接标签添加到页面中,并将 css 的位置硬编码到其中,也不会获取 css。

是否有一些关于发布我在这里缺少的网站的巧妙方法?尽管开发 ASP.NET MVC 应用程序多年,这是我第一次真正不得不发布一个网站,在我以前的公司,这总是别人的问题。这里,是我的。

4

2 回答 2

0

好的,经过大量测试,我尝试的每个 PDF 生成器都会出现问题。除了查看服务器上的 css 文件外,在其他任何地方进行测试都可以,但在服务器上进行测试会导致问题。

我通过在 cshtml 文件中包含样式并对其进行足够的更改以使其看起来正确来解决它。这是我讨厌的解决方案,但它有效。

于 2017-11-07T09:56:09.227 回答
0

你有没有设置一个基本网址 var pdf = htmlToPdfConverter.ConvertHtmlToPdfDocument(html, "http://www.example.com/css/");

另请参阅此答案:Html to pdf with images using hiqpdf

于 2018-01-30T15:32:35.523 回答