我编写的网站要求将网页转换为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添加到bootstrap包中,并且它们都没有被提取
我认为string baseUri
行没有将pdf创建者指向正确的位置,但我已经查看了变量中的内容并尝试了许多不同的变体,但没有任何工作。
我查看了htmlToConvert
中的文字,看起来链接似乎指向了正确的方向。
即使向页面添加链接标记,其中css的位置已硬编码到其中,也不会获取css。
关于发布我在这里缺少的网站是否有些巧妙?尽管多年来一直在开发ASP.NET MVC应用程序,但这是我第一次真正不得不发布一个网站,在我以前的公司,这总是别人的问题。在这里,它是我的。
答案 0 :(得分:0)
好的,经过大量测试后,我尝试每个PDF生成器都会出现问题。除了查看服务器上的css文件之外的其他任何地方的测试都有效,但是在服务器上进行测试会导致问题。
我通过在cshtml文件中包含样式并更改了足够的内容以使其看起来正确来解决它。它是我讨厌的解决方案,但它确实有效。
答案 1 :(得分:0)
您是否设置了基本网址,如
var pdf = htmlToPdfConverter.ConvertHtmlToPdfDocument(html, "http://www.example.com/css/");