Ste*_*zin 11 fonts heroku wicked-pdf ruby-on-rails-3.2
我正在使用wicked_pdf和rails 3.2.11以及ruby 1.9.3从HTML生成PDF并部署到Heroku.
我的pdf.css.scss.erb:
<% app_fullhost = Constants["app_fullhost"] %>
@font-face {
font-family:'DosisMedium'; font-style:normal; font-weight:500;
src: url(<%=app_fullhost%>/app/font/dosis/Dosis-Medium.ttf) format('woff');
}
*, body {
font-family: "DosisLight", 'Times New Roman', 'Arial', sans-serif;
}
Run Code Online (Sandbox Code Playgroud)
app_fullhost在开发或生产中,确切的主机在哪里.
我的pdf布局包括:
%html{:lang => I18n.locale}
%head
%meta{:charset => "utf-8"}
%title= content_for?(:title) ? yield(:title) : Settings.app_name
= wicked_pdf_stylesheet_link_tag "pdf"
Run Code Online (Sandbox Code Playgroud)
在production.rb我有
config.assets.precompile +=%w(pdf.css)
Run Code Online (Sandbox Code Playgroud)
这在开发中没有问题,但在Heroku上,pdf文件不会加载所需的字体.我也尝试过不同的解决方案,比如在production.rb中添加这些解决方案:
config.assets.paths << "#{Rails.root}/app/assets/fonts"
config.assets.precompile += %w(*.svg *.eot *.woff *.ttf)
config.assets.precompile += %w(.svg .eot .woff .ttf)
Run Code Online (Sandbox Code Playgroud)
我也尝试改变(在pdf.css.scss.erb中):
@font-face {
font-family:'Dosis'; font-style:normal; font-weight:500;
src: url('Dosis-Medium.ttf') format('woff');
}
Run Code Online (Sandbox Code Playgroud)
要么
@font-face {
font-family:'Dosis'; font-style:normal; font-weight:500;
src: url(<%= asset_path('Dosis-Medium.ttf')%>) format('woff');
}
Run Code Online (Sandbox Code Playgroud)
字体在inoku assets/fonts中,public/app/font/dosis并且在Heroku上的url响应正确:
..//myapp/app/font/dosis/Dosis-Medium.ttf" and
..//myapp/assets/Dosis-Medium.ttf
Run Code Online (Sandbox Code Playgroud)
如何在Heroku上加载字体?
wkhtmltopdf在wicked_pdf通过CSS加载字体方面,这个程序底层是非常时髦的.在某些系统上,它使用绝对路径,有时需要相对路径.即使你正确地获得了路径,它也可能因不准确的CSS减速等而被抛弃.仅仅在SO上就有很多关于这个的问题.
我发现最好,最灵活,最便携的解决方案是对您尝试使用的字体进行Base64编码,并将其直接包含在CSS文件中:
@font-face {
font-family: 'OpenSans';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
Run Code Online (Sandbox Code Playgroud)
让我看看我是否有这个权利:
服务器 1:构建 PDF,需要字体,并从 URL 中提取它们 这可以在 dev 本地运行,但不能在 heroku 上运行。
日志中有什么内容吗?(你看到字体的http请求了吗?)
你说它没有加载正确的字体。它是否会崩溃,或者只是呈现为好像从未加载过字体(例如,字体获取时出现 404)。
如果你不从heroku中提取字体文件,这是否有效?(例如使用 aws 或其他 URL 中的其他字体作为测试)
您是否从当前正在运行的同一服务器进程中提取数据?您是否有多个 dyno 或多个 unicorn 进程可以处理当前进程(构建 pdf)和传入请求(提供字体文件)
我见过人们只运行一个 dyno,但尝试运行两个 http 事件,却遇到了问题。如果您只有一个测功机(您没有提到其他情况),请添加另一个测功机并看看会发生什么,或者添加另一个独角兽进程。
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |