iText7 - текст на иврите отображается в обратном порядке? - PullRequest
0 голосов
/ 19 мая 2018

У меня проблема с отображением текста на иврите в обратном порядке.
Я нашел много примеров того, как это сделать в iText5, я ищу решение iText7.
Одно из возможных решений, которое я пробовал, - это обратить строку,но если строка не содержит букв алфавита, она испортится.

Также, как указать, что PDF запускается справа налево?
Я пытался

title.setBaseDirection(BaseDirection.RIGHT_TO_LEFT);

Я неувидеть любую разницу.
Спасибо!

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.BaseDirection;

public class SimpleHebPdfWriter {


    public static final String REGULAR =  "c:\\windows\\fonts\\ARIALUNI.TTF";

    public static void main(String[] args) throws Exception {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");
        String dest = "c:\\temp\\" + formatter.format(Calendar.getInstance().getTime()) + ".pdf";
        File file = new File(dest);
        file.getParentFile().mkdirs();
        new SimpleHebPdfWriter().manipulatePdf(dest);
    }

    protected void manipulatePdf(String dest) throws Exception { 
        FontProgramFactory.registerFont(REGULAR, "arialUnicode");
        PdfFont myFont = PdfFontFactory.createRegisteredFont("arialUnicode", PdfEncodings.IDENTITY_H, true);
        StringBuilder builder = new StringBuilder("-> אבגדהוזחטיכלמנסעפצקרשת  ->");
        Text title = new Text(builder.toString()).setFont(myFont);
        Text title2 = new Text(builder.reverse().toString()).setFont(myFont);
        title.setBaseDirection(BaseDirection.RIGHT_TO_LEFT);
        title2.setBaseDirection(BaseDirection.RIGHT_TO_LEFT);

        Paragraph p = new Paragraph().setFont(myFont).add(title).add(System.lineSeparator()).add(title2);       

        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
        pdfDoc.addFont(myFont);
        Document doc = new Document(pdfDoc);
        doc.setBaseDirection(BaseDirection.RIGHT_TO_LEFT);
        doc.add(p);
        doc.close();
    }
}

На рисунке ниже показано, как это выглядит, ничего не делая (первая строка)
Затем переворачивая строку (вторая строка)
И желаемоевывод (третья строка) sample output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...