Heroku 邪恶的PDF+;字体+;赫罗库+;铁路3.2

Heroku 邪恶的PDF+;字体+;赫罗库+;铁路3.2,heroku,fonts,ruby-on-rails-3.2,wicked-pdf,Heroku,Fonts,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/D

我使用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;
} 
在生产中,我有

config.assets.precompile +=%w(pdf.css)
这在开发中没有问题,但是在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) 


如何在Heroku上加载字体?

让我看看我是否有这个权利:

服务器1:生成PDF,需要字体,并从URL提取它们 这在dev中本地工作,但在heroku上不起作用

日志里有什么吗?(您看到字体的http请求了吗?)

你说它没有加载正确的字体。它是否会爆炸,或者只是呈现为从未加载过字体(例如字体提取中的404)

如果不从heroku中提取字体文件,这是否有效?(就像测试一样,使用aws或其他URL中的字体)

您是否从当前正在运行的同一个服务器进程中提取? 您是否有多个dyno或多个unicorn进程可以处理当前进程(构建pdf)和传入请求(提供字体文件)


我见过人们只运行一个dyno,但尝试运行两个http事件,就会遇到问题。如果您只有一个dyno(您没有提及其他内容),请添加另一个dyno,看看会发生什么,或者添加另一个unicorn进程。

wkhtmltopdf
,作为
wicked\U pdf
基础的程序,在通过CSS加载字体时是出了名的时髦。在某些系统上,它使用绝对路径,有时需要相对路径。即使你得到了正确的路径,它可能会被不准确的CSS减速等抛出。仅凭这一点就有几十个问题

我发现的最好、最灵活、最可移植的解决方案是对您尝试使用的字体进行Base64编码,并将其直接包含到CSS文件中:

@font-face {
    font-family: 'OpenSans';
    src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}

我遇到了这个问题,并遵循了Arman H概述的建议-我将字体转换为base 64,并在CSS/SCSS文件中直接引用它。我遵循的其余步骤与原始问题中概述的步骤非常相似

我在这里列出了完整的描述(带有到源代码的github链接):

首先,我引用了字体目录中的字体

<%# /fonts/custom_fonts.css.scss.erb %>
@font-face {
    font-family: "SourceSansPro-Light";
    src: url('<%= asset_path("SourceSansPro-Light.otf") %>');
}

这绝对有效,我唯一的补充就是用来获取Base64数据。我链接的原始网站资源已脱机。您可以使用Font Squirrel字体,或者如果您使用的是非Font Squirrel字体。您在一个文件中使用多个Base64编码的
@Font-face
条目时遇到过任何警告吗?@JamesChevalier:没有警告,您可以在一个样式表中使用多个嵌入的字体,而不会出现任何问题。我需要将哪种字体转换为Base64-eot,wott,ttf?我一直看到这个问题类似的答案,但没有人澄清这一点,而且出于某种原因,这个解决方案对我不起作用。谢谢。欢迎来到Stackoverflow。你能把答案的主要部分放在正文里而不是一个链接吗?我刚才在相关资料中加了一句,以后会更容易找到的。谢谢你的帮忙。
@font-face {
  font-family:'Dosis'; font-style:normal; font-weight:500;
  src: url(<%= asset_path('Dosis-Medium.ttf')%>) format('woff');
}
..//myapp/app/font/dosis/Dosis-Medium.ttf" and 
..//myapp/assets/Dosis-Medium.ttf 
@font-face {
    font-family: 'OpenSans';
    src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
<%# /fonts/custom_fonts.css.scss.erb %>
@font-face {
    font-family: "SourceSansPro-Light";
    src: url('<%= asset_path("SourceSansPro-Light.otf") %>');
}
<%# /stylesheets/pdf.css.scss %>
@font-face {
  font-family: 'Source Sans Pro Light';
  src: url(data:font/truetype;charset=utf-8;base64,T1RUTw-----THIS IS HUNDREDS OF LINES LONG -------sGAnBSvO7nBqXQ==)
}
<%# views/pdf_pages/show.html.erb %>
<meta charset='utf-8' />
<%= wicked_pdf_stylesheet_link_tag "pdf" %>
#application.rb
config.assets.precompile += ['pdf.css']