Itext PDF viser ikke riktig Myanmar Unicode Font

stemmer
44

Itext 5 vises ikke riktig på generert pdf-fil for Myanmar Unicode-skrifter .

Itext-versjon : 5.5.13.1

Forventningsresultat : သီဟိုဠ် မှ ဉာဏ် ကြီး ရှင် သည် အာယု ဝဎ္ ဍ န ဆေး ညွှန်း စာ ကို ဇလွန် ဈေး ဘေး ဗာ ဒံ ပင် ထက် အဓိဋ္ဌာန် လျက် ဂဃနဏ ဖတ် ခဲ့သည်။

Faktisk resultat :

legg

Google Drive Link for generert PDF.

Teststrengen min er lik med "The quick brown fox jump over the lat dog" på engelsk. Den inneholder de fleste av Myanmar alfabeter.

Java-program som jeg pleide å produktet over pdf

    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-tekster er riktige (du kan kopiere og lime inn i en tekstredigering som Notisblokk og se resultatet), men feil visning på pdf-fil.

Hva bør jeg gjøre for å vise riktig Myanmar Unicode Font ved å bruke itext-pdf-5?

Nå bruker jeg skitten måte å se skriftene lesbare på. Jeg konverterte alle unicode-strengene til "Zawgyi Font" (Dette er en annen Myanmar-font, og vi skal aldri bruke denne .) Og legge inn i pdf. Dette er ikke en god løsning, og vi kan ikke love at alle unicodes er konvertert riktig til Zawgyi-One fontstreng, og jeg vil ikke konvertere unicode-tekster til ikke-standardtekster. Derfor vil jeg ikke bruke denne måten.

Publisert på 15/05/2020 klokken 10:08
kilden bruker
På andre språk...                            


2 svar

stemmer
0

(Full avsløring: Jeg jobber for iText Software.)

iText 5 støtter ikke riktig Unicode-basert prosessering av Myanmar skrivesystem. Selv om iText 5 har en spesifikk implementering for arabisk, hindrer de iboende begrensningene i fontinfrastrukturen støtte for fontfunksjoner som er nødvendige for forskjellige andre skrivesystemer.

iText 7 forbedrer dette med en ny fontimplementering og en valgfri modul (pdfCalligraph, ikke open source) for å støtte forskjellige skriftsystemer. Myanmar støttes imidlertid ikke (ennå).

Den tilsvarende iText 7-koden ser slik ut:

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

Uansett om pdfCalligraph brukes eller ikke, er gjengivelsen fremdeles feil:

Feil gjengivelse av Myanmar

Hvis en kommersiell lisens er et alternativ for deg, kan du sende denne funksjonsforespørselen. Ytterligere skrivesystemer er fortsatt aktivt lagt til. Hvis ikke, er jeg redd for at dette ikke vil være mulig med iText, og du må finne en annen løsning.

Svarte 25/05/2020 kl. 23:56
kilden bruker

stemmer
0

Jeg møtte også det samme problemet. Men jeg brukte thymeleaf med iText. Jeg bruker ttf-fontpakken til språket (ikke unicode) og bruker omformeren til å konvertere unicode til språket mitt og knytte det til PDF-en som vanlig streng. det fungerer som en sjarm. Hvis du har muligheten til å bruke thymeleaf, kan du prøve denne tilnærmingen.

satt under CSS inne i stilkoden.

@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-kode for å generere pdf.

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();
Svarte 25/05/2020 kl. 15:04
kilden bruker

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