У меня проблема с отображением текста на иврите в обратном порядке.
Я нашел много примеров того, как это сделать в 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();
}
}
На рисунке ниже показано, как это выглядит, ничего не делая (первая строка)
Затем переворачивая строку (вторая строка)
И желаемоевывод (третья строка)