使用itext将html转换为pdf时,自定义字体在Windows中有效,但在Ubuntu中不可用

Erkan Erol

我尝试在从html转换的pdf文件中显示UTF-8字符(Ş,Ğ等)。我已经阅读了很多问答,并在下面编写了代码。它可以在我的本地计算机(Windows)中运行,但不能在测试服务器(Ubuntu)中运行。测试服务器中未使用该字体,并且缺少某些字符。问题是什么?

我的html文件使用Windows和Ubuntu中不存在的字体。

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        * { font-family:'Hickory Jack'; }
    </style>
</head>

Java方法:使用htmlText并返回pdf文件的字节。

public static byte[] convertHtmlToPdf(String htmlText) throws Exception{        
        String fontPath = PdfConverter.class.getResource("/fonts/").getPath();
        XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(fontPath, null);
        FontFactory.setFontImp(fontImp);


        ByteArrayOutputStream output = new ByteArrayOutputStream();
        InputStream is = new ByteArrayInputStream(htmlText.getBytes("UTF-8"));


        Document document = new Document();  
        PdfWriter writer = PdfWriter.getInstance(document, output);
        document.open();


        XMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();         
        xmlWorkerHelper.parseXHtml(writer, document, is, Charset.forName("UTF-8"),fontImp);

        document.close();

        byte[] bytes = output.toByteArray();
        output.close();     

        return bytes;
    }
Erkan Erol

问题实际上是路径问题。资源文件的完整路径作为字体路径无效。我这样更改字体提供程序部分,并且可以正常工作。

    XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    fontImp.register("/fonts/Hickory-Jack.ttf");
    fontImp.setUseUnicode(true);

    FontFactory.setFontImp(fontImp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

'innerText'在IE中有效,但在Firefox中不可用

自定义UserManager在OAuthAuthorizationServerProvider中不可用

代码在Xamarin Android上有效,但在Java(HttpPost JSON)中不可用

ASP GridView分页自定义CSS在设计视图中有效,但在浏览器中无效

Mysql分隔符在mysql中有效,但在PHP中不可用

自定义函数在ColdFusion 10/11中有效,但在Lucee中引发错误

为什么头文件在Windows中有效,但在Mac和Linux上却不可用?(strrev)

自定义bash命令在终端中有效,但在脚本中无效

Django翻译为自定义语言在开发中有效,但在生产中无效

“ kubectl修补程序”在Linux Bash上有效,但在Windows Powershell ISE中不可用

自定义Google助手突然在设备上不可用,但在键入提示时有效

FFmpeg转换为JPEG在VLC中有效,但在Mac Preview中不起作用?

如何将网页不可用页面替换为自定义页面?(网络视图)

PL / SQL-将索引状态从“不可用”转换为“有效”的存储过程

使用自定义模块创建NetSuite脚本时,获取“执行定义回调时所有SuiteScript API模块不可用”

Django只读字段仅在更改时有效,但在创建时不可用

Mallet在Linux上有效,但在Windows下不可用

cURL在cli上有效,但在php中不可用

使用jQuery选择数据属性-在Chrome浏览器中有效,而在Firefox中不可用。选择?

VIM语法高亮显示在MacVim中有效,但在终端中不可用vi吗?

选择选项文本颜色显示在下拉列表中,但不显示在方框中,此选项在ie 9中有效,但在chrome中不可用

$ .ajax.done在Firefox上有效,但在Chrome中不可用

CSS剪切路径在Firefox中有效,但在chrome中不可用

日期脚本在Linux上有效,但在AIX上不可用

通过 SSH 代理的 Git 在 Windows 中有效,但在 Ubuntu 中无效

自定义验证器属性在单元测试中有效,但在 web api 控制器中无效?

使用多种字体将 itext html 转换为 pdf

在 WHERE 子句中将 nvarchar 转换为 bigint 时出错,但在 SELECT 中有效

使用 DataWeave 2.0 将有效负载转换为自定义对象