首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HiQPdf找不到css

HiQPdf找不到css
EN

Stack Overflow用户
提问于 2017-10-31 10:44:40
回答 3查看 1.9K关注 0票数 0

我所写的网站需要将网页转换成PDF功能。在查看了选项之后,HiQPdf看起来是最好的选择,并且做了所有需要的事情,目前我正在使用免费版本,直到测试结束。

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

代码语言:javascript
复制
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运行它时,它就像我所期望的那样工作,得到的pdf看起来是正确的,一切都在正确的位置。当我在我的计算机上发布到文件系统时,它可以正常工作。当我将上面的文件复制到另一台笔记本电脑并通过它的ipAddress访问它时,它可以正常工作。

当我使用将其放到主测试服务器上时,就会出现这个问题。在这一点上,pdf被创建,文本在那里,但没有样式,一切都是黑色的白色文本。如果我在cshtml文件中包含了一些样式,那么就会得到它。网站上的其他所有内容都正常工作。我已经将本地site.css添加到引导包中,并且它们都没有被捕获。

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

我看过htmlToConvert中的文本,它看起来是对的,链接似乎指向了正确的方向。

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

有没有一些微妙的关于发布一个网站,我是在这里错过?尽管开发了多年的ASP.NET MVC应用程序,但这是我第一次不得不发布网站,在我以前的公司,这总是别人的问题。这里,是我的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-07 09:56:09

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

我通过在cshtml文件中包含样式并对其进行足够的更改,从而使其看起来正确,从而解决了这个问题。这是我讨厌的解决办法,但有效。

票数 0
EN

Stack Overflow用户

发布于 2018-01-30 15:32:35

您是否设置了类似于var pdf = htmlToPdfConverter.ConvertHtmlToPdfDocument(html, "http://www.example.com/css/");的基本Url

还请看这个答案:Html to pdf with images using hiqpdf

票数 0
EN

Stack Overflow用户

发布于 2022-05-03 12:05:16

@安德鲁,我也有同样的问题!

我使用免费版本的HiQPdf的代码在我的本地机器上工作得很好,可以将视图转换成PDF格式,但是在发布到服务器环境(在我的例子中是Azure托管的)时,CSS文件和图像根本没有被拾取。

和您一样,我尝试过各种方法,比如硬编码的绝对URL而不是相对的(不起作用),并将样式包括在.cshtml文件头中(当然,这是一个非常不受欢迎的解决方案)。

解决方案对您来说可能太晚了,但是事实证明,您可以在您的@Server.MapPath()文件中包含.cshtml来解析PDF的相对URL。

所以

href=@Server.MapPath("~/Content/css/site.css")

而不是

href="~/Content/css/site.css" />

以下是一个完整的区块:

代码语言:javascript
复制
<head>
    <title>Summary</title>
    
    <link rel="stylesheet" href=@Server.MapPath("~/Content/css/bootstrap_v5.css") />

    <link rel="stylesheet" href=@Server.MapPath("~/Content/css/site.css") />
</head>

还需要MapPath来解析图像(我也认为JavaScript文件也是这样,尽管我的解决方案不需要)。

代码语言:javascript
复制
<body>
    <div id="ProjectSummary">
        <div id="Header">
                <img id="Logo" src=@Server.MapPath("~/Content/images/LogoTransparent.png") alt="Logo">
        </div>

您的本地实例仍将按预期显示样式/图像,但是包含@Server.MapPath()将使其能够在后续环境中工作。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47033423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档