首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用*.ttc嵌入PDFBox字体

使用*.ttc嵌入PDFBox字体
EN

Stack Overflow用户
提问于 2013-11-20 22:30:59
回答 1查看 3.1K关注 0票数 2

PDFBox提供了嵌入各种类型字体的机制。例如,它提供了PDTrueTypeFont.loadTTF(...),它可以接受TrueType (*.ttf)文件。

TrueType集合格式(*.ttc)支持每个文件的多个字体,扩展为TrueType格式。

试图用*.ttc加载PDTrueTypeFont.loadTTF()文件会导致抛出IOException。

如何使用*.ttc将*.ttc文件中的一个或所有字体嵌入到PDF文档中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-21 00:33:30

PDF规范不允许将TrueType集合作为嵌入式字体。您需要从*.ttc中提取一个TTF格式的流并嵌入它。

目前(和AFAIK) PDFBox本身并不支持这一点;我使用的是谷歌的“sfntly”包。

快速而肮脏的解决方案:

代码语言:javascript
复制
FontFactory factory = FontFactory.getInstance();
Font[] fonts = factory.loadFonts( ... ); // pulls every TTF out of TTC
ArrayList<PDTrueTypeFont> pdf_fonts = new ArrayList<PDTrueTypeFont>();
for( Font f : fonts ){
   // sfntly writes each font to a TTF stream
   ByteArrayOutputStream out = ByteArrayOutputStream();
   factory.serializeFont(f, out);

   // PDFBox reads the stream and embeds the font
   ByteArrayInputStream ttf_font_stream = ByteArrayInputStream(out.toByteArray());
   pdf_fonts.add(PDTrueTypeFont.loadTTF(document, ttf_font_stream));
}

FontFontFactorycom.google.typography.sfntly

Java代码不能保证100%正确;最近一直在Clojure中工作.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20108467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档