美文网首页
openhtmltopdf 支持自定义字体、粗体

openhtmltopdf 支持自定义字体、粗体

作者: 码农梦醒 | 来源:发表于2018-11-30 12:44 被阅读55次

支持自定义字体

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 判断优先级,依次筛选

相关文章

  • openhtmltopdf 支持自定义字体、粗体

    支持自定义字体 支持粗体 斜体等类似 追溯源码,一种字体对应多个字体列表(常规、粗体、斜体、粗体_斜体) 根据字体...

  • android自定义字体

    Android O通过字体资源支持自定义字体,支持.otf(OpenType)和.ttf(TrueType)字体格...

  • 可爱的粗体手绘风格Mac字体包

    可爱的粗体手绘风格Mac字体包安装教程可爱的粗体手绘风格Mac字体包- Mac下载 可爱的粗体手绘风格Mac字体包...

  • iOS开发常用设置

    目录:[TOC]妈呀,怎么还不支持目录语法呢!!!@简叔 一、UI类 1、自定义字体使用   iOS自定义字体支持...

  • ie8不兼容的css属性

    注:粗体属性值为不支持的属性值。 字体单位 rem() 颜色 仅支持hex(16进制)表示法,不支持rgb或hsl...

  • 字体界的小清新---粗体字体Amada Font

    小清新粗体字体Amada Font是一组安装在mac电脑的字体册中使用的字体包,这组粗体字体适用于标签、海报、邀请...

  • 简书使用的简单语法

    <标题>: ——正常字体—— 标题一 标题二 标题三 <粗体>: ——正常字体——字体加粗字体加粗 <斜体>: —...

  • 高仿系统图原生UIAlertController

    支持 高仿系统原生样式效果,有Alert和Sheet两种模式 支持自定义文本字体和颜色 支持自定义view作为Ac...

  • iOS开发之UIFont字体大全和自定义字体

    苹果支持的字体 在开发过程中很多App为了美观经常需要使用一些自定义的字体,其实苹果本身也是支持很多字体的,下面就...

  • 微信小程序中自定义字体

    微信小程序支持自定义字体开放出来也有段时间,这边整理下使用自定义字体中,容易忽略的一些问题,和简便的全局自定义方式...

网友评论

      本文标题:openhtmltopdf 支持自定义字体、粗体

      本文链接:https://www.haomeiwen.com/subject/hethcqtx.html