在itextpdf-5.5.13.1生成的PDF中显示阿拉伯字符的垃圾字符

时间:2020-04-29 08:59:38

标签: java itext

我正在尝试使用现有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。

0 个答案:

没有答案
相关问题