openhtmltopdf 支持自定义字体、粗体

一、支持自定义字体

private static void renderPDF(String html, OutputStream outputStream) throws Exception {
        try {
            PdfRendererBuilder builder = new PdfRendererBuilder();
            addFont(builder, "D:\\font\\");
            builder.useUnicodeBidiSplitter(new ICUBidiSplitter.ICUBidiSplitterFactory());
            builder.useUnicodeBidiReorderer(new ICUBidiReorderer());
            builder.defaultTextDirection(TextDirection.LTR);
            builder.useSVGDrawer(new BatikSVGDrawer());
            builder.useObjectDrawerFactory(buildObjectDrawerFactory());
       //这一段可以忽略、正则处理内容(没有优化)
            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=\")(.*?)\"", "");
            builder.withHtmlContent(h, TestcaseRunner.class.getResource("/testcases/").toString());
            builder.toStream(outputStream);
            builder.run();
        } finally {
            outputStream.close();
        }
    }
    /**
     * 添加字体库
     * @param builder
     * @param dir
     */
    private static void addFont(PdfRendererBuilder builder, String dir) {
        File f = new File(dir);
        if (f.isDirectory()) {
            File[] files = f.listFiles(new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    String lower = name.toLowerCase();
//                    lower.endsWith(".otf") ||  对otf库的字体支持有问题,暂时屏蔽
                    return lower.endsWith(".ttf") || lower.endsWith(".ttc");
                }
            });
            for (File subFile:files) {
                String fontFamily = subFile.getName().substring(0, subFile.getName().lastIndexOf("."));
                builder.useFont(subFile, fontFamily);
            }
        }
    }

二、支持字体粗体

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

            }

斜体等类似

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

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

时间: 2025-01-02 17:13:40

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

TextView显示自定义字体、字体背景色、粗/斜体、上/下标、超链接和浮雕效果等

为控件中的文字添加显示效果,包括: 设置自定义字体 设置文字颜色及文字背景颜色 设置粗体 设置斜体 添加下划线 添加删除线 添加缩放效果 设置上标 设置下标 设置链接效果 设置文字模糊特效 下载地址:http://www.dwz.cn/zm0qR

文字排版--字体、字号、颜色、粗体、斜体、下划线、删除线

我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性.下面我们来看一个例子,下面代码实现:为网页中的文字设置字体为宋体. body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果用户本地电脑上如果没有安装你设置的字体,就会显示浏览器默认的字体.(因为用户是否可以看到你设置的字体样式取决于用户本地电脑上是否安装你设置的字体.)现在一般网页喜欢设置"微软雅黑",如下代码: body{font-family:"Micr

css3 自定义字体的使用方法

@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许多人会不自然的问,这样的东西IE能支持吗?当我告诉大家@font-face这个功能早在IE4就支持了你肯定会感到惊讶.我的Blog就使用了许多这样的自定义Web字体,比如说首页的Logo,Tags以及页面中的手写英文体,很多朋友问我如何使用,能让自己的页面也支持这样的自定义字体,一句话这些都是@fo

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

本文转自W3CPLUS 的<CSS @font-face> @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许多人会不自然的问,这样的东西IE能支持吗?当我告诉大家@font-face这个功能早在IE4就支持了你肯定会感到惊讶.我的Blog就使用了许多这样的自定义Web字体,比如说首页的Logo,Tags以及页面中的手写英文体,很多朋友问我如何使

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

1.    自定义字体 可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体 所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体:第一步,在assets目录下新建fonts目录,把TTF字体文件放到这里.第二步,程序中调用: TextViewtv = (TextView)findViewById(R.id.textView); AssetManagermgr=getAsset

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

最近在做车联网的产品,主打的是语音交互和导航功能,UI给的导航界面可真是够酷炫的.但麻烦的事情也来了,里面的一句话居然用到了三种字体.界面如图所示: 从图中可以看出 500m左前方行驶 居然使用了三种字体,数字一种.英文一种.汉字一种,(这里不讨论拆分三个textview能不能实现的问题,如果能实现也是最迫不得已的办法,何况你解决了这个,上面那个 -2h30m 你要拆成4个textview吗?显然这不合理)我们知道spannableString是个 很强大的类,可以通过new typefaces

用@font-face应用自定义字体

@font-face格式 @font-face { font-family: <YourWebFontName>; src: <source> [<format>][,<source> [<format>]]*; [font-weight: <weight>]; [font-style: <style>]; } 1.YourWebFontName:此值指的就是你自定义的字体名称,最好是使用你下载的默认字体,他将被引用到你的

css3中@font-face模块自定义字体

一.@font-face模块介绍 @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,在Web的开发中使用字体不再只能使用Web安全字体. 1.@font-face语法规则 @font-face { font-family: <YourWebFontName>; src: <source> [<format>][,<source> [<format>]]*; [font-

Android实现自定义字体

介绍 最近在看开源项目的时候,发现里面涉及到了自定义字体,虽然自己目前还用不到,但是动手demo笔记记录一下还是有必要的,没准哪天需要到这个功能. 原理 1.其实实现起来非常简单,主要是用到了Typeface这个类,通过加载assets里的ttf字体,调用View.setTypeface实现原生字体替换. 默认自带样式 public static final int NORMAL = 0; public static final int BOLD = 1; public static final