我是一名网络程序员,对字体没有深入的了解,并且很难让TCPDF包含我们的自定义OpenType字体。我们购买了OpenType字体文件(.oft),它们不受任何DRM保护。
关于此错误消息的许多问题最终会获得相同的建议。我为TCPDF(755)使用的文件夹设置了正确的文件权限,我可以毫不费力地使用addTTFfont()
来包含.ttf TrueType字体,如下所示:
$pdf->addTTFfont('/path-to-font/DejaVuSans.ttf', 'TrueTypeUnicode', '', 32);
所以我编写了以下代码来包含我们的OpenFont类型。 addTTFfont()
文档似乎表明支持OpenTypeUnicode和OpenType参数。
$pdf->addTTFfont('/path-to-font/customfont.otf', 'OpenTypeUnicode', '', 96);
结果是:
TCPDF ERROR: Could not include font definition file:
我们正在使用TCPDF v6.0.020,到目前为止,我一直在阅读TCPDF Fonts information page但没有运气。我注意到TCPDF也有addFont()
函数(documentation here),这似乎更明显,因为它不包含对任何字体类型的任何引用。但是,我无法使用此函数处理它所拥有的小文档。
非常感谢任何帮助。
答案 0 :(得分:12)
调用addTTFfont()
时,您确定收到该错误吗?我问的原因是因为我检查了TCPDF代码(只是对“无法包含字体定义文件”进行了全局搜索),该消息只出现在addFont()
方法中。
这两种方法可能有点令人困惑,但几个月前我给自己写了一些笔记,我将在下面部分重现,希望它能以某种方式帮助你:
addTTFfont()
- 此方法的主要功能是将字体从TTF(或OTF)转换为TCPDF所需的“原始”版本。理论上,这个函数的实现方式可以将它作为向文档添加字体的主要方法。它将首先检查tcpdf字体文件夹,如果转换后的文件不存在,它将继续进行转换。它只是一点点开销,但仍然不是我首选的向文件添加字体的方法,因为您需要知道要转换的字体样式,以使该过程成功运行。 IMO,最好使用此方法预转换您计划使用的任何字体,只需使用addFont()
将“原始”版本添加到文档中。
AddFont()
- 这会在文档中添加“原始”(即已转换)字体,这意味着它可用于编写文本。
SetFont()
- 设置您编写的下一个文本块的字体。
因此,我会使用addTTFfont()
将字体预转换为“原始”版本,然后在实际创建PDF的代码中使用addFont()
和setFont()
。
如果addFont()
失败并显示上面的错误消息,则表示找不到字体定义文件。请记住,如果您使用样式集('i','b','bi'等)调用addFont()
,则只需将其附加到文件名(扩展名之前)。
最重要的是,您需要确保调用addTTFFont()
生成“原始”字体文件并将其保存到fonts文件夹中。每种样式应该有三个文件,扩展名为.php
,.z
和.ctg.z
。因此,如果您转换了名为blah.ttf
的字体,则最终会得到blah.php
,blah.z
和blah.ctg.z
。如果您转换blah bold.ttf
,TCPDF会发现它是粗体字,并在文件名的末尾附加“b”:blahb.php
,blahb.z
和blahb.ctg.z
希望这里有一些金块可以提供帮助!祝你好运!
答案 1 :(得分:4)
TCPDF新字体添加和土耳其字符问题解决方法。
使用Converter Link:
答案 2 :(得分:1)
通过生成字体解决此问题。
确保所有路径都正确。
使用此link
请务必将文件夹public class TabView extends Form {
private Tabs tabs;
public TabView() {
super("Radio Web", new BorderLayout());
tabs = new Tabs(Component.BOTTOM);
addComponent(BorderLayout.CENTER, tabs);
tabs.setSwipeActivated(false);
Component component = null;
Button playButton = new Button(FontImage.createMaterial(FontImage.MATERIAL_PLAY_ARROW, UIManager.getInstance().getComponentStyle("Title"), 10));
playButton.getAllStyles().setBorder(RoundBorder.create().color(0x94170C));
playButton.getAllStyles().setMarginBottom(0);
playButton.getAllStyles().setMarginLeft(0);
playButton.getAllStyles().setMarginTop(0);
Label mediaInfoLabel = new Label("Artist - Title");
mediaInfoLabel.getAllStyles().setPaddingTop(2);
mediaInfoLabel.getAllStyles().setPaddingBottom(2);
Slider volumeSlider = new Slider();
volumeSlider.setMinValue(0);
volumeSlider.setMaxValue(100);
volumeSlider.setEditable(true);
Container box = GridLayout.encloseIn(1, new Container(), volumeSlider, mediaInfoLabel);
Container south = new Container(new FlowLayout(Component.LEFT, Component.BOTTOM));
south.getAllStyles().setBgPainter(new BackgroundPainter(south) {
@Override
public void paint(Graphics g, Rectangle rect) {
int color = g.getColor();
int alpha = g.getAlpha();
g.setColor(0xD12115);
g.setAlpha(255);
int y = rect.getHeight() / 2;
g.fillRect(0, y, rect.getWidth(), rect.getHeight() - y);
g.setColor(color);
g.setAlpha(alpha);
}
});
south.add(playButton).add(box);
component = BorderLayout.south(south);
component.getAllStyles().setBgPainter(new BackgroundPainter(component) {
@Override
public void paint(Graphics g, Rectangle rect) {
int color = g.getColor();
int alpha = g.getAlpha();
g.setColor(0x150100);
g.setAlpha(255);
g.fillRect(0, 0, rect.getWidth(), rect.getHeight());
g.setColor(color);
g.setAlpha(alpha);
}
});
tabs.addTab("", FontImage.MATERIAL_AUDIOTRACK, 5, component);
BrowserComponent sito = new BrowserComponent();
sito.setURL("https://www.codenameone.com");
tabs.addTab("", FontImage.MATERIAL_HTTP, 5, sito);
BrowserComponent fb = new BrowserComponent();
fb.setURL("https://www.facebook.com");
tabs.addTab("", FontImage.MATERIAL_FACE, 5, fb);
}
}
放在make_font
请记住正确的路径:html2pdf.class.php 在index.php中的文件夹make_font
或
如果您还有其他问题 - 字体:无法包含字体定义文件:
这是新字体名称正确的问题。
例如在生成pdf时使用:
正确:html2pdf
不正确:$html2pdf->addFont('lato i', '', 'latoi.php');
请记住,只生成了2个文件:
latoi.php
latoi.z
您不需要任何ctg文件。
我希望它会有所帮助
答案 3 :(得分:0)
在我的情况下,问题是字体路径不可写。我通过更改文件夹的权限来修复它:var_dump(K_PATH_FONTS);
答案 4 :(得分:0)
就我而言,这只是.ttf
字体文件(没有找到)的错误路径。
为了进行测试,我成功使用了驱动器D:/
,但是忘记了在使用C:/
命令的代码行中将其更改回我的php文件中的生产驱动器addTTFfont('C:/...')
。 / p>
不幸的是,TCPDF错误消息没有输出任何有关源文件和产生问题的代码行的信息。
答案 5 :(得分:0)
将dejavusans.php文件添加到tcpdf库中的字体文件夹中,放入codeingiter库文件夹中。