Я пытаюсь обновить PDF, используя существующий PDF с некоторыми значениями из другого сервиса, и в одном из полей могут быть слова c арабского языка. В случае engli sh все работает нормально, но в случае arabi c final pdf отображает ненужные символы.
Ниже приведен фрагмент:
public String processPDF(String src, String dest,Map<String,String> paramMap)
{
String base64PdfString = "";
try {
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
String beneficiaryName = "سامي جافيد";//paramMap.get("beneficiaryName");
if (object instanceof PRStream)
{
PRStream stream = (PRStream)object;
byte[] data = PdfReader.getStreamBytes(stream);
String dd = new String(data);
dd = dd.replace("$HeaderBeneficiary","Beneficiary");
dd = dd.replace("$HeaderDate","Date");
dd = dd.replace("$HeaderAmount","Amount");
if(textContainsArabic(beneficiaryName)) {
dd = dd.replace("$BeneficiaryName",BidiLine.processLTR(beneficiaryName,1,1));
}
else
{
dd = dd.replace("$BeneficiaryName",beneficiaryName);
}
stream.setData(dd.getBytes(StandardCharsets.UTF_8));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
GeneratePDFFromTemplate generatePdf = new GeneratePDFFromTemplate();
base64PdfString = generatePdf.convertPdfToBase64(dest);
}catch(IOException ex){
System.out.println("Failed to generate PDF Document");
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
return base64PdfString;
}
textContainsArabi c is метод, который сообщает, имеет ли строка арабские c символы или нет, и convertPdfToBase64 преобразует файл в base64.