Itext 5.5将RTL语言(阿拉伯语)的HTML转换为PDF不适用于tomcat

Itext 5.5将RTL语言(阿拉伯语)的HTML转换为PDF不适用于tomcat,tomcat,pdf,itext,arabic,right-to-left,Tomcat,Pdf,Itext,Arabic,Right To Left,我正在编写从Itext 5.5和XMLWorker的阿拉伯语文本的HTML到PDF转换 当运行独立的Java程序时,这工作得非常好。(正如预期的那样,它使用RTL编写sprint语言),但在tomcat中运行同一程序时始终打印LTR。(即使使用硬编码字符串、tomcat应用程序代码中的文件也尝试过) 下面是示例代码。取自 public void createPdf(文件) 抛出IOException,DocumentException{ //第一步 文档=新文档(); //步骤2 PDF编写器=

我正在编写从Itext 5.5和XMLWorker的阿拉伯语文本的HTML到PDF转换

当运行独立的Java程序时,这工作得非常好。(正如预期的那样,它使用RTL编写sprint语言),但在tomcat中运行同一程序时始终打印LTR。(即使使用硬编码字符串、tomcat应用程序代码中的文件也尝试过)

下面是示例代码。取自

public void createPdf(文件)
抛出IOException,DocumentException{
//第一步
文档=新文档();
//步骤2
PDF编写器=
getInstance(文档,新文件输出流(文件));
//步骤3
document.open();
//步骤4
//风格
CSSResolver CSSResolver=新样式AttrCSSResolver();
XMLWorkerFontProvider fontProvider=
新的XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
register(“/Users/ashish/Downloads/NotoNaskhArabicRegular.ttf”);
CssAppliers CssAppliers=新的CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext=新的HtmlPipelineContext(cssAppliers);
setTagFactory(Tags.getHtmlTagProcessorFactory());
//管道
PdfWriterPipeline pdf=新的PdfWriterPipeline(文档、编写器);
HtmlPipeline html=新的HtmlPipeline(htmlContext,pdf);
CssResolverPipeline css=新的CssResolverPipeline(cssResolver,html);
//XML工作者
XMLWorker=newxmlworker(css,true);
XMLParser p=新的XMLParser(worker);
String htmlContentAr=“阿拉伯之弦”;
//p、 解析(新的FileInputStream(HTML),Charset.forName(“UTF-8”);
p、 解析(新的ByteArrayInputStream(htmlcontent.getBytes(StandardCharsets.UTF_8)),Charset.forName(“UTF-8”);
//步骤5
document.close();
}

对不起。愚蠢的问题。问题是在我的战争部署,2版本的itext被复制,这是造成问题

使用5.5.5jar的Itext和Xmlworker可以很好地工作

public void createPdf(File file)
        throws IOException, DocumentException {
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter writer =
            PdfWriter.getInstance(document, new FileOutputStream(file));
        // step 3
        document.open();
        // step 4
        // Styles
        CSSResolver cssResolver = new StyleAttrCSSResolver();
        XMLWorkerFontProvider fontProvider =
            new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
        fontProvider.register("/Users/ashish/Downloads/NotoNaskhArabicRegular.ttf");
        CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
        HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

        // Pipelines
        PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
        HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
        CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);

        // XML Worker
        XMLWorker worker = new XMLWorker(css, true);
        XMLParser p = new XMLParser(worker);
        String htmlContentAr ="<table><tr><td>String of Arabia</td><td dir=\"rtl\" style=\"font-family: Noto Naskh Arabic\">لورانس العرب</td></tr></table>";

        //p.parse(new FileInputStream(HTML), Charset.forName("UTF-8"));
        p.parse( new ByteArrayInputStream(htmlContentAr.getBytes(StandardCharsets.UTF_8)), Charset.forName("UTF-8"));

        // step 5
        document.close();
    }