Unable to save Arabic words in a PDF - PDFBox Java

前端 未结 2 1696
感情败类
感情败类 2021-01-18 09:17

Trying to save Arabic words in an editable PDF. It works all fine with English ones but when I use Arabic words, I am getting this exceptio

相关标签:
2条回答
  • 2021-01-18 10:00

    That's how I made it work, I hope it would help others. Just use the font that is supported by the language that you want to use in the PDF.

    public static void main(String[] args) throws IOException
    {
      String formTemplate = "myFormPdf.pdf";
    
      try (PDDocument pdfDocument = PDDocument.load(new File(formTemplate)))
      {
        PDAcroForm acroForm = pdfDocument.getDocumentCatalog().getAcroForm();
        // you can read ttf from resources as well, this is just for testing 
        PDFont font = PDType0Font.load(pdfDocument,new File("/path/to/font.ttf"));
        String fontName = acroForm.getDefaultResources().add(pdfont).getName();
        if (acroForm != null)
        {
            PDTextField field = (PDTextField) acroForm.getField( "sampleField" );
            field.setDefaultAppearance("/"+fontName +" 0 Tf 0 g");
            field.setValue("جملة");
        }
    
        pdfDocument.save("updatedPdf.pdf"); 
      }
    }
    

    Edited: Adding the comment of mkl The font name and the font size are parameters of the Tf instruction, and the gray value 0 for black is the parameter for the g instruction. Parameters and instruction names must be appropriately separated.

    0 讨论(0)
  • 2021-01-18 10:02

    You need a font which supports those Arabic symbols.
    Once you've got a compatible font, you can load it using PDType0Font

    final PDFont font = PDType0Font.load(...);
    

    A Type 0 font is a font which references multiple other fonts' formats, and can, potentially, load all available symbols.

    See also the Cookbook - working with fonts (no examples with Type 0, but still useful).

    0 讨论(0)
提交回复
热议问题