提问人:Jerome 提问时间:11/9/2023 更新时间:11/9/2023 访问量:54
从 Rails CSS 文件渲染图像以用于 Wicked PDF
rendering an image from a rails css file for wicked PDF
问:
对象的级联嵌套通过相对于嵌套级别的图像进行标识:
#nestedlist, #nestedlist li {
font-size: 12px;
list-style-type: none;
}
#nestedlist ul {
list-style-image: url("/yellow_dark.png");
}
/* UL Layer # Rules based on quantity_of_ul */
#nestedlist ul ul {
list-style-image: url("red_base.png");
}
#nestedlist ul ul ul {
list-style-image: url("/green_light.png");
}
等。
无论图像的位置如何,这都可以在浏览器中正确呈现,无论是在公共目录还是在资产目录中。但是,邪恶的 PDF 需要图像的绝对路径,并且无法处理上述内容;如果未指定,它将返回空白或黑色项目符号。尝试使用,但唉,不采取颜色选项。list-style-type: none;
list-type: square;
如何强制转换 css 文件,以便为 wicked_pdf 布局调用的预编译 css 文件中的图像提供绝对 URL?pdf
答:
0赞
Alex
11/9/2023
#1
您必须配置asset_host
,因为当它没有具体设置时,wickedpdf 将使用本地 url,这对我不起作用:file://
if pathname =~ URI_REGEXP
# asset_path returns an absolute URL using asset_host if asset_host is set
pathname
else
File.join(Rails.public_path, asset.sub(/\A#{Rails.application.config.action_controller.relative_url_root}/, ''))
end
https://github.com/mileszs/wicked_pdf/blob/2.6.3/lib/wicked_pdf/wicked_pdf_helper/assets.rb#L131
# config/environment/development.rb
config.action_controller.asset_host = "http://localhost:3000"
/* app/assets/stylesheets/pdf.css */
ul {
list-style-image: url("circle.svg");
}
<!-- show.pdf.erb -->
<%= wicked_pdf_stylesheet_link_tag "pdf" %>
<ul>
<li>Peaches</li>
<li>Apples</li>
<li>Plums</li>
</ul>
wicked_pdf_stylesheet_link_tag
helper 现在输出以下内容:
<style type='text/css'>
ul {
list-style-image: url(http://localhost:3000/assets/circle-a438dbaaf222a262201c1d46bd32e81d2ecb96f95fd50d00a5ad9b57a7778248.svg);
}
</style>
您也可以尝试显式使用 来获取完整的 url 或内联数据 url。asset_url("circle.svg")
wicked_pdf_asset_base64("circle.svg")
评论