一、支持自定义字体

  1. private static void renderPDF(String html, OutputStream outputStream) throws Exception {
  2. try {
  3. PdfRendererBuilder builder = new PdfRendererBuilder();
  4. addFont(builder, "D:\\font\\");
  5. builder.useUnicodeBidiSplitter(new ICUBidiSplitter.ICUBidiSplitterFactory());
  6. builder.useUnicodeBidiReorderer(new ICUBidiReorderer());
  7. builder.defaultTextDirection(TextDirection.LTR);
  8. builder.useSVGDrawer(new BatikSVGDrawer());
  9. builder.useObjectDrawerFactory(buildObjectDrawerFactory());
  10.        //这一段可以忽略、正则处理内容(没有优化)
  11. String h = html.replaceAll("<!--[\\w\\W\r\\n]*?-->", "").replaceAll("(?i)<img+([^>]*?[\\s\"])[(.*?)>]", "<img$1/>").replaceAll("&nbsp;", " ").replaceAll("(ng-bind=\"|ng-class=\"|ng-src=\"|ng-style=\")(.*?)\"", "");
  12. builder.withHtmlContent(h, TestcaseRunner.class.getResource("/testcases/").toString());
  13. builder.toStream(outputStream);
  14. builder.run();
  15. } finally {
  16. outputStream.close();
  17. }
  18. }
  19.  
  1. /**
  2. * 添加字体库
  3. * @param builder
  4. * @param dir
  5. */
  6. private static void addFont(PdfRendererBuilder builder, String dir) {
  7. File f = new File(dir);
  8. if (f.isDirectory()) {
  9. File[] files = f.listFiles(new FilenameFilter() {
  10. public boolean accept(File dir, String name) {
  11. String lower = name.toLowerCase();
  12. // lower.endsWith(".otf") || 对otf库的字体支持有问题,暂时屏蔽
  13. return lower.endsWith(".ttf") || lower.endsWith(".ttc");
  14. }
  15. });
  16. for (File subFile:files) {
  17. String fontFamily = subFile.getName().substring(0, subFile.getName().lastIndexOf("."));
  18. builder.useFont(subFile, fontFamily);
  19. }
  20. }
  21. }

二、支持字体粗体

  1. for (File subFile:files) {
  2. String fontFamily = subFile.getName().substring(0, subFile.getName().lastIndexOf("."));
              //核心代码
    //自定义规则 加粗的库 含有"_"
    // 700 为bold对应的数值、默认为400
  1. if(fontFamily.indexOf("_") > 0){
  2. builder.useFont(subFile, fontFamily.substring(0, fontFamily.indexOf("_")), 700, FontStyle.NORMAL, true);
  3. }else{
  4. builder.useFont(subFile, fontFamily);
  5. }
  6.  
  7. }

斜体等类似

追溯源码,一种字体对应多个字体列表(常规、粗体、斜体、粗体_斜体)

根据字体名称_粗体_style 判断优先级,依次筛选

openhtmltopdf 支持自定义字体、粗体的更多相关文章

  1. chromium 34以后中文字体粗体渲染问题

    估计不少人更新后都遇到这个情况了吧,粗体渲染如然变得很模糊,很奇怪,Google下说是字体实现方式变了,国内一些网站用的中文字体都是宋体,但是宋体本身没有粗体,Win下的粗体是微软自己通过某种方式实现 ...

  2. 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果

    前言: Freetype是一个跨平台.开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了.本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不 ...

  3. MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法

    微软雅黑字体,有标准体和粗体两种字体,我用的系统是OSX10.9,adobe或者是office软件中,均无法同时使用.要么只能用标准体,粗体报错:要么就是能用粗体,标准体无法使用.很偶然找到了以下MA ...

  4. css3 自定义字体的使用方法

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...

  5. TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)

    1.    自定义字体可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体所以,我们可以在程序中放入TTF字 ...

  6. 使用自定义字体 @font-face 小试

    第一次了解到@font-face是小伙伴给我展示的功能  感觉奇妙的不得了    @font-face 是CSS3中的一个模块  使用它你就可以将你自定义的web字体 去实现一些奇妙的想法 首先先介绍 ...

  7. (原创)如何在spannableString中使用自定义字体

    最近在做车联网的产品,主打的是语音交互和导航功能,UI给的导航界面可真是够酷炫的.但麻烦的事情也来了,里面的一句话居然用到了三种字体.界面如图所示: 从图中可以看出 500m左前方行驶 居然使用了三种 ...

  8. 在前端页面中使用@font-face来显示web自定义字体【转】

    本文转自W3CPLUS 的<CSS @font-face> @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现, ...

  9. CSS自定义字体(@font-face选择符)

    @font-face是CSS中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体. 语法规则: @f ...

随机推荐

  1. (网页)textarea去掉回车换行

    转自CSDN: 1,把textarea内输入的内容中有回车换行的转成<br />传给后台, var content = $("#text").val().replace ...

  2. scrapy系列(一)——Python 爬虫框架 Scrapy1.2 Windows 安装教程

    scrapy作为一个成熟的爬虫框架,网上有大量的相关教程供大家选择,尤其是关于其的安装步骤更是丰富的很.在这里我想记录下自己的相关经验,希望能给大家带来点帮助. 在scrapy0.24版之前,安装sc ...

  3. Ant使用及项目实践

    1.简介 Ant 是一个 Apache 基金会下的跨平台的基于 Java 语言开发的构件工具.这是一个基于开放的操作系统构建和部署的工具,该工具需要从命令行执行. 2.特点 Ant 是基于 Java ...

  4. SQL Server ->> DAC(Dedicated Administrator Connection)专用管理员连接

    专用管理员连接是一种特殊的SQL Server服务器诊断性质的连接,用于在正常或者说标准连接形式无法连接SQL Server服务器的情况下连接到服务器进行服务器性能或者错误诊断.DAC同样支持安全加密 ...

  5. 百度纯CSS生成菜单

    首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a ...

  6. MySQL复制ERROR 1794 (HY000): Slave is not configured or failed to initialize properly.

    ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set  ...

  7. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  8. 阵列卡raid H730写策略write-through和write-back配置说明

    问题描述: 最近公司新进了测试服务器,但是在做阵列的时候忘记写策略里面的配置意思了 就网上查了一下,然后顺便做个笔记记录一下 write-through 数据在写入存储的同时,要写入缓存,这种方式安全 ...

  9. Python基础知识:集合

    1.集合(set)是一个存放在中括号内的无序,不重复的序列.例如:set = {'1','12','25'} 2.创建集合的两种方法: set = {1,2,3} 中括号直接创建 set = {[1, ...

  10. Eclipse 报错The method xxx of type must override a superclass method、Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet

    问题: 如上图, 没改钱@Override会报错The method run() of type must override a superclass method 原因: java1.5中继承接口是 ...