Java程序+pdf模板技术导出PDF文件之多语言的应用

Java程序+pdf模板技术导出PDF文件之多语言的应用

目录

简单介绍应背景


我们在Web应用中有时需要导出一些报表数据 ,而这些数据导出的形式需要是不能修改的,那么作为报表数据最好的载体莫过于PDF文件,如何有效的导出pdf文件呢?

而且可以支持多种语言的模式,例如,中文环境,英文环境,日文,法语等等,不同的语言环境也能正常导出需要的报表数据的有效版本。

以下为一个小示例,直接上代码了:

/**
 * 使用pdf-box技术 + pdf 模板将报表数据导出成pdf文件
 * 导出文件内容支持多语言的形式(英文、中文、日本等等)
 * @author rdfeng
 * @version 1.0.0
 * @date 2021/2/4 16:24
 */
public class ExportPdfByPdfBox {


    public static void main(String args[]){

        String filepath = "templete\\personal_form.pdf";
        String msgpath_en = "fieldmsg\\field-msg_en_US.properties";
        String msgpath_zh = "fieldmsg\\field-msg_zh_CN.properties";
        String msgpath_ja = "fieldmsg\\field-msg_ja_JP.properties";
        FileInputStream fis = null;
        PDDocument pdf;
        Properties prop = null;

        try {
            System.out.println("请输入导出的语言? zh,en,ja");
            Scanner input = new Scanner(System.in);
            String language = input.next();

            if(language.equals(Locale.SIMPLIFIED_CHINESE.getLanguage())){
                prop = readPropertiesFile(getFilePath(msgpath_zh));
            }else if(language.equals(Locale.ENGLISH.getLanguage())){
                prop = readPropertiesFile(getFilePath(msgpath_en));
            }else if(language.equals(Locale.JAPANESE.getLanguage())){
                prop = readPropertiesFile(getFilePath(msgpath_ja));
            }else{
                //TODO
            }

            fis = new FileInputStream(new File(getFilePath(filepath)));
            //根据各参数写pdf文件
            pdf =  writePDFDocument(PDDocument.load(fis),prop);
            pdf.save(new File(getFilePath(filepath)));

            pdf.close();
            fis.close();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {}
    }


    /**
     * 根据文件名获取文件的路径
     * @param filepath
     * @return
     */
    private static String getFilePath(String filepath) throws IOException {
        File directory = new File("");
        String path = directory.getCanonicalPath();
        if (path !=null){
            return path + File.separator+filepath;
        }
        return null;
    }
    /**
     * 填充pdf模板数据
     *
     * @param pdf
     * @param prop
     * @return
     */
    private static PDDocument writePDFDocument(PDDocument pdf,Properties prop) throws IOException {

        PDDocumentCatalog doc = pdf.getDocumentCatalog();
        PDAcroForm acroForm = doc.getAcroForm();
        if (acroForm != null) {
            acroForm.setNeedAppearances(true);
            PDTextField field = (PDTextField) acroForm.getField("personal_information");
            field.setValue("个人身份信息登记表");
            //1、字段名称
            //姓名
            field = (PDTextField)acroForm.getField("field_name");
            field.setValue(prop.getProperty("feild.person.name"));
            //性别
            field = (PDTextField)acroForm.getField("field_sex");
            field.setValue(prop.getProperty("feild.person.sex"));
            //年龄
            field = (PDTextField)acroForm.getField("field_age");
            field.setValue(prop.getProperty("feild.person.age"));
            //身高
            field = (PDTextField)acroForm.getField("field_high");
            field.setValue(prop.getProperty("feild.person.high"));
            //身份证号
            field = (PDTextField)acroForm.getField("field_identity");
            field.setValue(prop.getProperty("feild.person.identity"));
            //职业
            field = (PDTextField)acroForm.getField("field_career");
            field.setValue(prop.getProperty("feild.person.career"));
            //薪资
            field = (PDTextField)acroForm.getField("field_salary");
            field.setValue(prop.getProperty("feild.person.salary"));
            //公司
            field = (PDTextField)acroForm.getField("field_company");
            field.setValue(prop.getProperty("feild.person.company"));
            //地址
            field = (PDTextField)acroForm.getField("field_address");
            field.setValue(prop.getProperty("feild.person.address"));
            //备注
            field = (PDTextField)acroForm.getField("field_notes");
            field.setValue(prop.getProperty("feild.person.notes"));


            //2、字段赋值
            field = (PDTextField)acroForm.getField("field_name_value");
            field.setValue("大大");
            //性别
            field = (PDTextField)acroForm.getField("field_sex_value");
            field.setValue("男");
            //年龄
            field = (PDTextField)acroForm.getField("field_age_value");
            field.setValue("18");
            //身高
            field = (PDTextField)acroForm.getField("field_high_value");
            field.setValue("1.78");
            //身份证号
            field = (PDTextField)acroForm.getField("field_identity_value");
            field.setValue("101231199005262319");
            //职业
            field = (PDTextField)acroForm.getField("field_career_value");
            field.setValue("软件工程师");
            //薪资
            field = (PDTextField)acroForm.getField("field_salary_value");
            field.setValue("25000.00");
            //公司
            field = (PDTextField)acroForm.getField("field_company_value");
            field.setValue("北京浩天正通科技股份有限公司");
            //地址
            field = (PDTextField)acroForm.getField("field_address_value");
            field.setValue("北京市海淀区软件园10院25栋楼");
            //备注
            field = (PDTextField)acroForm.getField("field_notes_value");
            field.setValue("以上信息均为虚拟信息。");
        }
        return pdf;
    }

    /**
     * 根据不同的语言环境读取不同的配置文件信息
     * @param msg_path
     * @return
     */
    private static Properties readPropertiesFile(String msg_path) throws IOException {
        Properties prop = new Properties();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(msg_path),"GBK"));
        prop.load(bufferedReader);
        return prop;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值