我需要使用图像作为我正在生成的各种文档上的水印,并使用wicked-pdf转换为PDF。花了一段时间,但我几乎一切正常。我的show.pdf.erb是:
<!DOCTYPE html>
<html>
<head >
<style type="text/css">
<%= Rails.application.assets.find_asset('wicked.css').to_s.html_safe %>
</style>
</head>
<body class='wicked'>
<div>
<p><%= "#{Doc.last.contents} ".html_safe %></p>
</div>
</body>
</html>
我的wicked.css是:
.wicked {
background-image:url(/assets/test2.jpg);
background-repeat: no-repeat;
background-position: 50% -15%;
}
我的控制器只是调用:
render :pdf => "test2",
:formats => [:pdf],
:show_as_html => true
这一切都很好。从数据库中提取的水印和文本正确显示。但是,当我从控制器中删除“show_as_html”时,水印消失,只有文本显示为PDF。同样,如果我添加“save_to_file”,文件只保存文本而没有水印。我很困惑我可能做错了什么。我在任何日志中都找不到任何错误。谢谢你的任何建议。
我通过使用SASS asset-data-urlrelative-asset-path解决了这个问题,也许你可以使用这样的东西:
background-image: asset-data-url('test2.png')
这在WickedPdf Github问题跟踪器中得到了解决:
https://github.com/mileszs/wicked_pdf/issues/302
这里的基本问题是url(/assets/test2.jpg)
是一个相对路径,当WickedPdf
需要一个绝对路径时,内容应该被引用如下:
url('file:///home/unconundrum/code/my_app/app/assets/images/test2.jpg')
这可以通过更便携的方式完成,如下所示:
background-image:url('<%= "file://#{Rails.root.join('app','assets','images','test2.jpg')}" %>');
使用ERB样式表。
我的大学申请面临同样的问题。解决方案:
background-image: url("file://#{Rails.root.join('app/assets/images/marksheet-background.jpg')}");