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;
}
}