How to create a PDF document from languages of Unicode char set regarding using third party Fonts

后端 未结 2 1493
走了就别回头了
走了就别回头了 2021-02-11 09:38

I\'m using PDFBox and iText to create a simple (just paragraphs) pdf document from various languages. Something like :

pdfBox:

private s         


        
2条回答
  •  时光说笑
    2021-02-11 10:01

    If you are using iText, it has quite good support.

    In iText in Action (chapter 2.2.2) you can read more.

    You have to download some unicode Fonts like arialuni.ttf and do it like this :

        public static File fontFile = new File("fonts/arialuni.ttf");
    
        public static void createITextDocument(File from, File to) throws DocumentException, IOException {
    
            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(to));
            document.open();
            writer.getAcroForm().setNeedAppearances(true);
            BaseFont unicode = BaseFont.createFont(fontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    
            FontSelector fs = new FontSelector();
            fs.addFont(new Font(unicode));
    
            addContent(document, getParagraphs(from), fs);
            document.close();
        }
    
        private static void addContent(Document document, List paragraphs, FontSelector fs) throws DocumentException { 
    
            for (int i = 0; i < paragraphs.size(); i++) {
                Phrase phrase = fs.process(paragraphs.get(i));
                document.add(new Paragraph(phrase));
            }
        }
    

    arialuni.ttf fonts work for me, so far I checked it support for

    BG, ES, CS, DA, DE, ET, EL, EN, FR, IT, LV, LT, HU, MT, NL, PL, PT, RO, SK, SL, FI, SV
    

    and only PDF in Romanian language wasn't created properly...

    With PDFBox it's almost the same:

    private void createPdfBoxDoc() throws IOException, FileNotFoundException, COSVisitorException {
        PDDocument document = new PDDocument();
        PDPage page = new PDPage();
        document.addPage(page);
        PDPageContentStream contentStream = new PDPageContentStream(document, page);
    
        PDFont font = PDTrueTypeFont.loadTTF(document, "fonts/arialuni.ttf");
        contentStream.setFont(font, 12);
        contentStream.beginText();
        contentStream.moveTextPositionByAmount(100, 400);
        contentStream.drawString("š");
        contentStream.endText();
        contentStream.close();
        document.save("test.pdf");
        document.close();
    }
    

    However as Gagravarr says, it doesn't work because of this issue PDFBOX-903 . Even with 1.6.0-SNAPSHOT version. Maybe trunk will work. I suggest you to use iText. It works there perfectly.

提交回复
热议问题