Rotativa / Wkhtmltopdf图像无法显示

时间:2013-01-04 16:10:50

标签: asp.net-mvc image path wkhtmltopdf rotativa

我目前正在创建一个MVC 4 Web应用程序。

我的动作有一个基本背景图像,它始终与箭头图像相同,箭头图像的度数会根据动作中收集的信息而改变。

我使用

调用此操作
<img src="@Url.Action("trend-image", "NonReg_Reports")" alt="background" width="245" height="105" />

这在调用时工作正常,只是显示HTML网页。它给了我HTML。

<img src="/nonreg-report/01495344/trend-image" alt="background" width="245" height="105">

然后我使用Rotativa / Wkhtmltopdf将此HTML页面转换为PDF。它运行与上面相同的代码。

问题是,如果我使用上面的代码,我只会得到一个带有替代文字的白框。

如果我使用<img src="~/Content/images/trend_back_medium.png" alt="astuff" />这是我项目中的实际背景图片,它可以正常工作。

由于使用方式,上述代码中的图像无法保存在任何地方。我认为这是一个路径问题,但在尝试了很多不同的事情后,我仍然无法让它发挥作用。

非常感谢任何建议或帮助。谢谢。

7 个答案:

答案 0 :(得分:18)

我遇到了同样的问题。普通的html视图没有图片,pdf没有显示它。我使用Server.MapPath指向图片,它没问题......

<img src="@Server.MapPath("~/Folder/SubFolder/Subfolder/ImageName.png")" />

我希望这会有所帮助

亚当

答案 1 :(得分:2)

我遇到了同样的问题,我发现了一种解决方法,不是很好,但它符合我的需要。

似乎Rotativa(Wkhtmltopdf?)对从http处理程序返回的图像有问题(至少在我的情况下)。所以为了处理这种情况,在返回new ViewAsPdf...之前的控制器操作中,我的代码手动将文件保存到某个本地'temp'文件夹,并用渲染视图中的'src'替换以服务器路径方式指向本地文件的路径,例如:http://localhost/img/temp/trend-image.png。 这不是一个好的解决方案,如果你已经找到了更好的解决方案,请告诉我。

答案 2 :(得分:2)

将属性[System.Web.Mvc.AllowAnonymous]添加到返回图像的控制器方法中为我解决了问题。

答案 3 :(得分:0)

我发现在我的网页中,图片没有显示,因为它们是.gif文件。 Rotativa可能有GIF问题。 当我将图像更改为.jpg或.png时,一切都运行良好。

答案 4 :(得分:0)

我认为这可能归结为基本上“.png”位丢失了。

您可以添加这样的映射/nonreg-report/01495344/trend-image.png»/nonreg-report/01495344/trend-image并让两个网址都有效,为什么不呢?这样wkhtmltopdf被愚弄了,你仍然拥有动态图像而不将其保存在磁盘上的任何位置。动态网址可以工作,我这样做是为了转换为wkhtmltopdf的gif2png。

也可能有一个绝对网址,我认为你可以做这样的事情:

src="@Url.Action("trend-image", "NonReg_Reports", null, Request.Url.Scheme)"

答案 5 :(得分:0)

似乎通过css工作正常...

我试图在页面顶部显示一个徽标,然后用div将其切换,并将高度和宽度设置为图像的高度和宽度。

CSS:

div.logo {
    background-image: url("/images/logo/logo.png");
    height: 53px;
    width: 185px;
}

HTML:

<div class="logo"></div>

答案 6 :(得分:0)

If you are specifiying height and width then make sure you should write it in style tag like <some-tag style="height: 100px; width:100px">