Itext पीडीएफ सही ढंग से प्रदर्शित नहीं करता है म्यांमार यूनिकोड फ़ॉन्ट

वोट
4

Itext 5 म्यांमार यूनिकोड फोंट के लिए उत्पन्न पीडीएफ फाइल में सही ढंग से प्रदर्शित नहीं करता है।

आईटैक संस्करण : 5.5.13.1

अपेक्षा परिणाम :: မှ::: သည်:::::::::

वास्तविक परिणाम :

यहां

उत्पन्न पीडीएफ के लिए Google ड्राइव लिंक

मेरा टेस्ट स्ट्रिंग अंग्रेजी में "आलसी कुत्ते पर त्वरित भूरे लोमड़ी कूद" के समान है। इसमें म्यांमार के अधिकांश अक्षर शामिल हैं।

जावा प्रोग्राम जो मैं पीडीएफ के ऊपर उत्पाद करता था

    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();

Ouput ग्रंथ सही हैं (आप नोटपैड जैसे पाठ संपादकों में कॉपी और पेस्ट कर सकते हैं और परिणाम देख सकते हैं) लेकिन पीडीएफ फाइल में गलत प्रदर्शन।

मुझे itext-pdf-5 का उपयोग करके म्यांमार यूनिकोड फ़ॉन्ट को सही ढंग से प्रदर्शित करने के लिए क्या करना चाहिए?

अब मैं फोंट को पढ़ने के लिए गंदे तरीके का उपयोग कर रहा हूं। मैंने सभी यूनिकोड स्ट्रिंग्स को "Zawgyi फ़ॉन्ट" में बदल दिया (यह एक और म्यांमार फ़ॉन्ट है और हमें इसका उपयोग कभी नहीं करना चाहिए ।) और पीडीएफ में एम्बेड किया गया। यह अच्छा समाधान नहीं है और हम वादा नहीं कर सकते कि सभी यूनिकोड्स को Zawgyi-One फ़ॉन्ट स्ट्रिंग में सही रूप से परिवर्तित किया गया है और मैं यूनिकोड ग्रंथों को गैर-मानक पाठ में परिवर्तित नहीं करना चाहता। इसलिए मैं इस तरह का उपयोग नहीं करना चाहता।

15/05/2020 को 10:08
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
0

(पूरा खुलासा: मैं iText सॉफ्टवेयर के लिए काम करता हूं।)

iText 5 म्यांमार लेखन प्रणाली के उचित यूनिकोड आधारित प्रसंस्करण का समर्थन नहीं करता है। हालांकि iText 5 में अरबी के लिए एक विशिष्ट कार्यान्वयन है, इसके फ़ॉन्ट बुनियादी ढांचे की अंतर्निहित सीमाएं फ़ॉन्ट सुविधाओं के लिए समर्थन को रोकती हैं जो विभिन्न अन्य लेखन प्रणालियों के लिए आवश्यक हैं।

iText 7 अलग फ़ॉन्ट सिस्टम का समर्थन करने के लिए एक नया फ़ॉन्ट कार्यान्वयन और एक वैकल्पिक मॉड्यूल (pdfCalligraph, खुला स्रोत नहीं) के साथ इस पर सुधार करता है। हालाँकि, म्यांमार समर्थित (अभी तक) नहीं है।

इसी iText 7 कोड इस तरह दिखता है:

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();

भले ही pdfCalligraph का उपयोग किया गया हो या नहीं, रेंडरिंग अभी भी गलत है:

गलत म्यांमार प्रतिपादन

यदि व्यावसायिक लाइसेंस आपके लिए एक विकल्प है, तो कृपया यह सुविधा अनुरोध सबमिट करें। अतिरिक्त लेखन प्रणाली अभी भी सक्रिय रूप से जोड़ी गई हैं। यदि नहीं, तो मुझे डर है कि यह iText के साथ संभव नहीं होगा और आपको एक और समाधान खोजना होगा।

25/05/2020 को 23:56
का स्रोत उपयोगकर्ता

वोट
0

मैंने भी उसी समस्या का सामना किया। लेकिन मैंने iText के साथ thymeleaf का उपयोग किया। मैं भाषा के ttf फ़ॉन्ट पैकेज (यूनिकोड नहीं) का उपयोग करता हूं और अपनी भाषा में यूनिकोड को परिवर्तित करने के लिए कनवर्टर का उपयोग करता हूं और इसे सामान्य स्ट्रिंग के रूप में पीडीएफ में संलग्न करता हूं। यह एक जादू की तरह काम करता है। यदि आपके पास थाइमेलफ का उपयोग करने की संभावना है, तो इस दृष्टिकोण का प्रयास करें।

शैली टैग के अंदर सीएसएस के नीचे रखें।

@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>

जावा कोड पीडीएफ उत्पन्न करने के लिए।

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();
25/05/2020 को 15:04
का स्रोत उपयोगकर्ता

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