RTL not working in pdf generation with itext 5.5 for Arabic text

前端 未结 3 761
北恋
北恋 2020-12-04 03:14

I have java code that writes arabic characters with the help of itext 5.5 and xmlworker jars, but its writing left to right even after writer.setRunDirection(PdfWrit

3条回答
  •  春和景丽
    2020-12-04 03:31

    //This solution works for me: :)

    // document
            Document document = new Document(PageSize.LEGAL);
    
            //fonts
            XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
            fontProvider.register("/Users/ibrahimbakhsh/Library/Fonts/tradbdo.ttf", BaseFont.IDENTITY_H);
            fontProvider.register("/Users/ibrahimbakhsh/Library/Fonts/trado.otf", BaseFont.IDENTITY_H);
            fontProvider.register("/Users/ibrahimbakhsh/Library/Fonts/tahoma.ttf", BaseFont.IDENTITY_H);
            CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
            HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
            htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
    
            // CSS
            CSSResolver cssResolver =
                    XMLWorkerHelper.getInstance().getDefaultCssResolver(true);
    
    
    
            // Pipelines
            ElementList elements = new ElementList();
            ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
            HtmlPipeline html = new HtmlPipeline(htmlContext, end);
            CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
    
            // HTML
            htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
            htmlContext.autoBookmark(false);
    
    
            // XML Worker
            XMLWorker worker = new XMLWorker(css, true);
            XMLParser p = new XMLParser(worker);
            p.parse(new FileInputStream(HTML));
    
    
            //writer
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
            writer.setInitialLeading(12.5f);
            writer.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
    
    
            // step 4
            document.open();
    
    
            // step 5
    
            for (Element e : elements) {
                //out.println(e.toString());
                if(e instanceof PdfPTable){
                    PdfPTable t = (PdfPTable) e;
                    t.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
                    ArrayList rows = t.getRows();
                    for(PdfPRow row:rows){
                        PdfPCell[] cells = row.getCells();
                        for(PdfPCell cell:cells){
                            cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
                        }
                    }
                    e = t;
                }
                document.add(e);
            }
    
    
            //try adding new table 
    
            PdfPTable table = new PdfPTable(1);
            table.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
            Font f = new Font(BaseFont.createFont("/Users/ibrahimbakhsh/Library/Fonts/trado.otf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED));
            PdfPCell cell = new PdfPCell(new Paragraph("تجربة نص عربي",f));
            table.addCell(cell);
            document.add(table);
    
            // step 6
            document.close();
    

提交回复
热议问题