java - 自定义字体不适用于 java 中的 itextrenderer

标签 java css flying-saucer

我已经使用@font-face 在 html 中嵌入了我的自定义字体。这适用于所有浏览器,但是当我尝试通过 itextrender 在 java 自定义字体中将其转换为 pdf 时,它不再使用 Arial 等默认字体。

CSS 代码:

    @font-face {
        font-family: Subaru-Medium;
        src: url('fonts/Subaru-Medium.eot'); /* IE9 Compat Modes */
        src: url('fonts/Subaru-Medium.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
             url('fonts/Subaru-Medium.ttf')  format('truetype'), /* Safari, Android, iOS */
             url('fonts/Subaru-Medium.svg#svgFontName') format('svg'); /* Legacy iOS */
        }

java代码:

public static void writePDF(String HTMLfileName, String PDFFileName, String WhereToSave,String fontDirectory)
    {
        try
        {
            String url = new File(HTMLfileName).toURI().toURL().toString();
            String outputFile = WhereToSave+PDFFileName;
            OutputStream os = new FileOutputStream(outputFile);

            ITextRenderer renderer = new ITextRenderer();
            ITextFontResolver fontResolver=renderer.getFontResolver();
                  fontResolver.addFont("C:\\Users\\benay.debnath\\Desktop\\htmltemplate\\fonts\\Subaru-Medium.ttf", true);

                // fontResolver.addFontDirectory(fontDirectory, true);
                SharedContext scontext=renderer.getSharedContext();
                // scontext.setDPI(72);
                scontext.setDotsPerPixel(12);
                renderer.setDocument(url);
                renderer.layout();
                renderer.createPDF(os);
                os.close();
                System.out.println("status:$:true^#^message:$:PDF    Genarated^#^fileName:$:"+outputFile);
        }catch (Exception e) {
            System.out.println("status:$:false^#^message:$:"+e.getMessage());
        }
    }

任何人都可以帮助我找出我做错了什么?非常感谢帮助。

最佳答案

首先确保您的系统中已经安装了以下字体,如果没有安装字体并在您的代码中添加以下行。

public static void writePDF(String HTMLfileName, String PDFFileName, String WhereToSave,String fontDirectory)
    {
        try
        {
            String url = new File(HTMLfileName).toURI().toURL().toString();
            String outputFile = WhereToSave+PDFFileName;
            OutputStream os = new FileOutputStream(outputFile);

            ITextRenderer renderer = new ITextRenderer();
    renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED);

                // fontResolver.addFontDirectory(fontDirectory, true);
                SharedContext scontext=renderer.getSharedContext();
                // scontext.setDPI(72);
                scontext.setDotsPerPixel(12);
                renderer.setDocument(url);
                renderer.layout();
                renderer.createPDF(os);
                os.close();
                System.out.println("status:$:true^#^message:$:PDF    Genarated^#^fileName:$:"+outputFile);
        }catch (Exception e) {
            System.out.println("status:$:false^#^message:$:"+e.getMessage());
        }

我也遇到了同样的问题,我已经使用上述解决方案解决了。希望这对你有用:)

关于java - 自定义字体不适用于 java 中的 itextrenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274678/

相关文章:

java - 使用 Flying Saucer 和 CSS 进行分段页数统计

java - 双迭代器循环

html - 如何仅使用 CSS 在 HTML 中垂直居中文本

javascript - 响应式网站 - 根据尺寸加载 html

html - Bootstrap CSS : Editing page navigator

java - Flying Saucer 忽略自动换行

java - Netbeans 中的 Jaxb 错误

java - 我在 hashmap 上的 for 循环出错

java - 如何使用 jackson JsonNode 浏览未知的键名称?

java - Flying Saucer iTextPDF 中文字体