如何在HexaPDF中使用多种字体,即复合字体

问题描述

我们的用户给了我们表情符号和许多其他奇怪的字符,内置的Helvetica无法处理。 Google的Noto字体本身也不行-我需要弄清楚如何在HexaPDF中声明Noto字体家族,而我不知道如何使用给定的文档来做到这一点。 OpenSans是一种改进,但我仍然希望字形覆盖面更多。

更新:

我使用此方法设置字体:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="12" class="addToCart">Item 12</a><br />
<a id="13" class="addToCart">Item 13</a>
<div class="cart--counter">**</div>
<br />
<div id="cart"></div>
<br />
<div id="cart_button" class="hidden">cart button</div>

但是,没有Noto字体可用于此操作-我会遇到类似“缺少字形-'A'”的错误

我能做的最好的就是使用OpenSansEmoji,并用以下代码块替换丢失的字形:

def self.pdf_summary_font
  @@pdf_summary_font ||= File.open(Rails.root.join('public','OpenSansEmoji.ttf'),'r')
end
canvas = page.canvas(type: :overlay)
canvas.font(self.class.pdf_summary_font,size: 10)

解决方法

看看https://hexapdf.gettalong.org/documentation/reference/api/HexaPDF/index.html和配置选项“ font_map”。这使您可以声明任何TrueType文件并使用它。

您还可以直接通过Canvas#font方法使用字体文件的路径。

如果您需要覆盖多种字符,则需要使用覆盖所有字符的单个字体,the fonts included in this ZIP file中的一种可能应该可以工作(Google表示582种语言,包括237个区域)。