如何使用自定义字体从 servlet 使用 iText+XMLWorker 创建 PDF?

     2023-02-24     85

关键词:

【中文标题】如何使用自定义字体从 servlet 使用 iText+XMLWorker 创建 PDF?【英文标题】:How to create a PDF with iText+XMLWorker from servlet using custom font? 【发布时间】:2015-08-23 02:53:38 【问题描述】:

使用 iText/XMLWorker 示例(主要是 this one),我可以轻松编写简单的应用程序,能够使用我自己的额外字体从 HTML 代码创建 PDF 文件,但一旦尝试在一些 Web 服务代码中使用我的东西,我以如下异常结束:

Table 'name' does not exist in file:/C:/work/MyServer/target/classes/fonts/My%20Font.ttf
ExceptionConverter: com.itextpdf.text.DocumentException: Table 'name' does not exist in file:/C:/work/MyServer/target/classes/fonts/My%20Font.ttf

...这似乎表明在 Web 服务上下文中,字体文件无法按预期加载。这是我的大部分代码:

public HtmlRenderer(final String css, final String[] fontPaths) 
    // fontPaths = 
    // "/fonts/My Font.ttf",
    // "/fonts/My Other Font.ttf",
    // ...
    // ;

    // CSS
    cssResolver = new StyleAttrCs-s-resolver();
    if (css != null) 
        final CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(css.getBytes()));
        cssResolver.addCss(cssFile);
    

    // HTML
    XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    if (fontPaths != null) 
        for (final String fontPath : fontPaths) 
            final String path = this.getClass().getResource(fontPath).toExternalForm();
            fontProvider.register(path);
        
    
    CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
    htmlContext = new HtmlPipelineContext(cssAppliers);
    htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
    ...

我是否应该依赖以下内容:

    从临时文件中的资源中提取字体(参见here) 然后,在自定义字体工厂中预加载字体(参见there)

【问题讨论】:

至少这不意味着我尝试使用的字体不完全符合 ttf 标准吗? 【参考方案1】:

我不得不指示 Maven 对资源字体文件进行字面复制(常规过滤过程会更改文件并破坏字体):

<resources>
    <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>**/*.ttf</exclude>
        </excludes>
    </resource>
    <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.ttf</include>
        </includes>
    </resource>
    ...
</resources>

【讨论】:

在使用xml的android TextView中使用自定义字体

...我已将自定义字体文件添加到我的资产/字体文件夹中。如何从我的XML中使用它?我可以从如下代码中使用它:TextViewtext=(TextView)findViewById(R.id.textview03);Typefa 查看详情

在 Android 中使用自定义字体

】在Android中使用自定义字体【英文标题】:UsingacustomtypefaceinAndroid【发布时间】:2011-02-2717:34:45【问题描述】:我想为我正在创建的Android应用程序使用自定义字体。我可以从Code中单独更改每个对象的字体,但我有数百个。所以... 查看详情

如何从资源中加载自定义字体? [C#]

】如何从资源中加载自定义字体?[C#]【英文标题】:HowtoloadcustomfontfromResources?[C#]【发布时间】:2022-01-1416:02:09【问题描述】:我需要以某种方式加载这个字体文件,并在全局范围内应用它——这意味着一切都会使用这个字体... 查看详情

如何预览自定义字体 Android Studio(使用书法)

】如何预览自定义字体AndroidStudio(使用书法)【英文标题】:HowtopreviewCustomFontAndroidStudio(usingCalligraphy)【发布时间】:2016-02-2015:40:25【问题描述】:目前我正在使用书法库来使用自定义字体,很棒https://github.com/chrisjenx/Calligraphy... 查看详情

如何在gmail中使用自定义字体?

】如何在gmail中使用自定义字体?【英文标题】:Howtousecustomfontingmail?【发布时间】:2017-01-0120:01:24【问题描述】:我们如何在邮件程序中使用自定义字体,尤其是gmail。我进行了很多搜索,但没有发现任何有用的东西,但我在我... 查看详情

我们如何使用样式自定义警报对话框的字体?

】我们如何使用样式自定义警报对话框的字体?【英文标题】:Howcanwecustomizethefontsofanalertdialogbyusingstyles?【发布时间】:2019-03-1500:48:24【问题描述】:我们如何使用样式自定义androidalert对话框的字体我使用setTypeFace()方法找到了... 查看详情

我们如何在 iOS 应用中使用自定义字体? [复制]

】我们如何在iOS应用中使用自定义字体?[复制]【英文标题】:HowcanweusecustomfontinaniOSapp?[duplicate]【发布时间】:2012-10-1308:07:54【问题描述】:可能重复:CanIembedacustomfontinaniPhoneapplication?如何在我的iPhone应用程序中自定义字体?可... 查看详情

如何在网站上使用自定义字体? [复制]

】如何在网站上使用自定义字体?[复制]【英文标题】:HowcanIusecustomfontsonawebsite?[duplicate]【发布时间】:2012-11-1503:07:36【问题描述】:为了让我的网站看起来不错,我需要使用自定义字体,特别是Thonburi-Bold。问题是-除非用户安... 查看详情

Tailwind/CSS 使用自定义字体

...描述】:我有一个项目需要使用自定义字体。但我不知道如何在我的HTML中使用它。我已经在网上搜索了如何执行此操作,但所有示例都使用包含在一个文件中的字体。我的字体包含在多个文件中。如何指定要在每个元素上使用... 查看详情

如何使用 tailwind 和 ruby​​ 安装自定义字体

】如何使用tailwind和ruby​​安装自定义字体【英文标题】:Howtoinstallcustomfontswithtailwindandruby【发布时间】:2021-10-1310:50:35【问题描述】:我正在使用RubyonRails和Tailwind,我想安装自定义字体,我下载并放入文件夹/public/fonts/Barcelony... 查看详情

从应用程序特定文件夹加载自定义字体文件

...以从自定义位置加载自定义字体文件?如果是这样,我该如何加载自定义字体文件?请提出建议。谢谢,【问题讨论】:【参考方案1】:使用AddFontRe 查看详情

如何在 Xamarin Forms 中使用自定义字体(任何外部字体)作为嵌入资源?

】如何在XamarinForms中使用自定义字体(任何外部字体)作为嵌入资源?【英文标题】:Howtousecustomfont(anyexternalfont)asembeddedresourceinXamarinForms?【发布时间】:2020-04-1621:48:40【问题描述】:我想在我的XamarinForms项目中使用自定义外部... 查看详情

如何在 Handlebars 和 Puppeteer 中使用自定义字体?

】如何在Handlebars和Puppeteer中使用自定义字体?【英文标题】:HowtousecustomfontswithHandlebarsandPuppeteer?【发布时间】:2021-05-1504:49:23【问题描述】:我有一个Handlebar模板,我使用Puppeteer将其转换为PDF。问题是如何使用自定义字体?目... 查看详情

如何在 iOS 应用程序中使用自定义字体? [复制]

】如何在iOS应用程序中使用自定义字体?[复制]【英文标题】:HowtousecustomfontiniOSApps?[duplicate]【发布时间】:2012-03-1005:04:14【问题描述】:可能重复:CanIembedacustomfontinaniPhoneapplication?您好,我想在我的原生iOS应用中使用缅甸字体... 查看详情

如何在 GTK 应用程序中使用自定义字体

】如何在GTK应用程序中使用自定义字体【英文标题】:HowtouseacustomfontinaGTKapp【发布时间】:2013-05-1200:22:51【问题描述】:我有一个字体文件/path/to/app/fonts/custom-font.ttf,我想使用它。如何导入自定义TTF以在GTK+3.0应用程序中使用?... 查看详情

如何在 WebView 中使用自定义字体

】如何在WebView中使用自定义字体【英文标题】:HowtousecustomfontwithWebView【发布时间】:2010-11-2313:33:36【问题描述】:现在我想显示一些unicode字符,我使用了标签:<fontface="Arial">somethinghere</font>。但是WebView好像找不到Arial... 查看详情

如何在 Java 中使用自定义字体?

】如何在Java中使用自定义字体?【英文标题】:HowcanIuseacustomfontinJava?【发布时间】:2011-08-0420:56:02【问题描述】:我用Java编写了一个程序,它使用一种特殊字体,默认情况下在任何操作系统上都不存在该字体。在Java中是否可... 查看详情

如何在openimaj中使用自定义字体(代码片段)

我正在开发一个项目,我想使用自定义字体在图像上绘制文本。我不想使用内置的OpenIMAJ字体。有没有办法做到这一点?答案使用GeneralFont类通过AWT访问所有系统字体:MBFImageimg=newMBFImage(800,600,3);img.drawText("OpenIMAJ",20,100,newGeneralFont... 查看详情