Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用iText+创建PDF;使用自定义字体的servlet中的XMLWorker?_Java_Pdf_Servlets_Itext_Xmlworker - Fatal编程技术网

Java 如何使用iText+创建PDF;使用自定义字体的servlet中的XMLWorker?

Java 如何使用iText+创建PDF;使用自定义字体的servlet中的XMLWorker?,java,pdf,servlets,itext,xmlworker,Java,Pdf,Servlets,Itext,Xmlworker,使用iText/XMLWorker示例(大多数情况下),我可以轻松编写简单的应用程序,能够使用自己的额外字体从HTML代码创建PDF文件,但一旦尝试在某些web服务代码中使用我的东西,我就以以下例外情况结束: Table 'name' does not exist in file:/C:/work/MyServer/target/classes/fonts/My%20Font.ttf ExceptionConverter: com.itextpdf.text.DocumentException:

使用iText/XMLWorker示例(大多数情况下),我可以轻松编写简单的应用程序,能够使用自己的额外字体从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 StyleAttrCSSResolver();
    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());
    ...
我是否应该依赖以下方面:

  • 从临时文件中的资源中提取字体(cf.)
  • 然后,在自定义字体工厂中预加载字体(cf.)

  • 我必须指示Maven对资源字体文件进行文字复制(常规过滤过程是更改文件并损坏字体):

    
    真的
    src/main/resources
    **/*.ttf
    假的
    src/main/resources
    **/*.ttf
    ...
    
    至少这不意味着我尝试使用的字体不完全符合ttf标准吗?