我正在尝试使用现有PDF以及来自另一服务的某些值来更新PDF,并且其中一个字段中可能包含阿拉伯语。在使用英语的情况下,一切正常,但是在使用阿拉伯语的最终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;
}
textContainsArabic是一种方法,该方法判断字符串是否具有阿拉伯字符,然后convertPdfToBase64将文件转换为base64。