无法在PDF中保存阿拉伯语单词-PDFBox Java

时间:2019-04-01 09:08:38

标签: java pdfbox

尝试将阿拉伯语单词保存在可编辑的PDF中。它对英语来说都可以正常工作,但是当我使用阿拉伯语单词时,出现了以下异常情况:

  

java.lang.IllegalArgumentException:   U + 0627无法使用此字体Helvetica编码:WinAnsiEncoding

这是我生成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();
    if (acroForm != null)
    {
        PDTextField field = (PDTextField) acroForm.getField( "sampleField" );
        field.setValue("جملة");
    }
    pdfDocument.save("updatedPdf.pdf"); 
  }
}

2 个答案:

答案 0 :(得分:4)

这就是我的工作方式,希望对其他人有所帮助。只需使用要在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"); 
  }
}

已编辑:添加mkl的评论 字体名称和字体大小是Tf指令的参数,黑色的灰度值0是g指令的参数。参数和指令名称必须适当分开。

答案 1 :(得分:1)

您需要一种支持这些阿拉伯符号的字体。
获得兼容的字体后,您可以使用PDType0Font

加载它
final PDFont font = PDType0Font.load(...);

Type 0字体是引用其他多种字体格式的字体,并且有可能加载所有可用的符号。

另请参阅Cookbook - working with fonts(没有Type 0的示例,但仍然有用)。