Az Ixt szöveg nem jeleníti meg a helyesen a Myanmar Unicode betűtípust

szavazat
4

Az Itext 5 nem jelenik meg helyesen a Myanmar Unicode betűkészletekhez létrehozott pdf fájlban.

Szöveges változat : 5.5.13.1

Várt eredmény : သီဟိုဠ် မှ ဉာဏ် ရှင် သည် အာယု အာယု ဝဎ္ ဍ ဍ ဍ စာ

Tényleges eredmény :

írja

Google Drive Link a létrehozott PDF-hez.

A teszthúrom hasonló a "Gyors barna róka átugrani a lusta kutyán" kifejezéshez angolul. A legtöbb mianmari ábécét tartalmazza.

Java program, amelyet előzőleg pdf formátumban készítettem

    String fileName = sample.pdf;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        Document doc = new Document();
        PdfWriter writer = PdfWriter.getInstance(doc, baos);
        writer.setCloseStream(false);

        BaseFont unicode = BaseFont.createFont(/fonts/NotoSansMyanmar-Regular.ttf, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font myanmarUniCodeFont = new Font(unicode, 11, Font.NORMAL, BaseColor.BLACK);
        Rectangle pageSize = new Rectangle(PageSize.A4);
        doc.setPageSize(pageSize);
        doc.open();
        String textStr = သီဟိုဠ်မှ ဉာဏ်ကြီးရှင်သည်အာယုဝဎ္ဍနဆေးညွှန်းစာကို ဇလွန်ဈေးဘေးဗာဒံပင်ထက် အဓိဋ္ဌာန်လျက် ဂဃနဏဖတ်ခဲ့သည်။;
        doc.add(new Paragraph(textStr, myanmarUniCodeFont));
        doc.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }

    response.setCharacterEncoding(StandardCharsets.UTF_8.name());
    response.setHeader(Cache-Control, no-cache,no-store,max-age=0);
    response.setHeader(Pragma, No-cache);
    response.setHeader(Content-Disposition, inline; filename= + fileName);
    response.setContentType(application/pdf);
    response.setContentLength(baos.size());
    OutputStream os = response.getOutputStream();
    baos.writeTo(os);
    os.flush();
    os.close();
    baos.close();

A kimeneti szövegek helyesek (másolhatja és beillesztheti a szövegszerkesztőbe, például a Jegyzettömbbe, és megnézheti az eredményt), de a pdf fájl helytelen megjelenítése.

Mit kell tennem a Myanmar Unicode betűtípus megfelelő megjelenítéséhez az itext-pdf-5 használatával?

Most piszkos módon használom a betűkészletek olvashatóságát. Az összes unicode karakterláncot "Zawgyi betűkészletre" konvertáltam (ez egy másik Mianmar betűtípus, és soha nem szabad ezt használni .), És pdf-re ágyaztam be. Ez nem jó megoldás, és nem ígérhetjük, hogy az összes unikódot helyesen konvertáljuk Zawgyi-One betűkészlet-karakterláncra, és nem akarom az unicode szövegeket nem szabványos szövegekké konvertálni. Ezért nem akarom ezt használni.

A kérdést 15/05/2020 10:08
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

(Teljes nyilvánosságra hozatal: az iText Software-nél dolgozom.)

Az iText 5 nem támogatja a mianmari írórendszer megfelelő Unicode alapú feldolgozását. Noha az iText 5 rendelkezik az arab nyelvre vonatkozó speciális megvalósítással, betűtípus-infrastruktúrájának lényeges korlátozásai megakadályozzák a különféle más írási rendszerekhez szükséges betűtípus-funkciók támogatását.

Az iText 7 tovább javítja ezt egy új betűtípus-megvalósítással és egy opcionális modullal (pdfCalligraph, nem nyílt forráskódú) a különféle írási rendszerek támogatására. Mianmar azonban (még) nem támogatott.

A megfelelő iText 7 kód így néz ki:

PdfWriter writer = new PdfWriter(baos);
PdfDocument pdfdoc = new PdfDocument(writer);
Document doc = new Document(pdfdoc);

PdfFont f = PdfFontFactory.createFont("/fonts/NotoSansMyanmar-Regular.ttf",
    PdfEncodings.IDENTITY_H, true);

String textStr =
    "သီဟိုဠ်မှ ဉာဏ်ကြီးရှင်သည်အာယုဝဎ္ဍနဆေးညွှန်းစာကို ဇလွန်ဈေးဘေးဗာဒံပင်ထက် အဓိဋ္ဌာန်လျက် ဂဃနဏဖတ်ခဲ့သည်။";
// Explicit writing system
//doc.add(new Paragraph(textStr).setFont(f).setFontScript(Character.UnicodeScript.MYANMAR));
// Rely on autodetection
doc.add(new Paragraph(textStr).setFont(f));
doc.close();

Függetlenül attól, hogy a pdfCalligraph alkalmazható-e vagy sem, a megjelenítés továbbra is rossz:

Rossz Mianmar renderelés

Ha egy kereskedelmi licenc választható az Ön számára, kérjük, küldje el ezt a szolgáltatási kérelmet. További írásrendszereket továbbra is aktívan adunk hozzá. Ha nem, attól tartok, hogy ez az iTextnél nem lesz lehetséges, és másik megoldást kell találnia.

Válaszolt 25/05/2020 23:56
a forrás felhasználó

szavazat
0

Ugyanezzel a problémával is szembesültem. De a thymeleaf-et használtam az iText-rel. A nyelv ttf betűkészletét használom (nem unicode), és az átalakítóval konvertálom az unicode-t saját nyelvemre, és normál karakterláncként csatolom a PDF-fájlba. úgy működik, mint egy báj. Ha lehetősége van a tümeleaf alkalmazására, próbálja ki ezt a megközelítést.

tedd a CSS alá a stíluscímkét.

@font-face {
    font-family: 'myfont-family';
    src: url('/fonts/myfont.ttf');
    -fs-pdf-font-embed: embed;
    -fs-pdf-font-encoding: Identity-H;
}

.mylanguage{
    font-family: 'myfontfamily';
}

<p class="mylanguage">your converted font text</p>

Java kód a pdf létrehozásához.

context.setVariable("myvariable", myvariable);
String html = templateEngine.process("mypdf", context);
html = templateEngine.process("mythymeleaf", context);
String fileName = "myfile.pdf";
PDFEncryption pdfEncryption  = new PDFEncryption();
String password = "0000";
pdfEncryption.setUserPassword(password.getBytes());

ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
renderer.layout();
renderer.setPDFEncryption(pdfEncryption);
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();
Válaszolt 25/05/2020 15:04
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more