SVF账票的PDF文件生成
在对日项目中,有种要把FORM内容生成PDF文件的业务。原理就是首先制作frm文件,然后动态设置值到表单对应项,最后打印成PDF。
使用SVF.jar包来开发。
1.frm文件的绘制,如下图:
每个部分类似控件,每个控件都有属性,类型于可视化编程的意思。蓝色字体是label,静态的,不可改变。红色字体的是动态的,运行时从外部读取的,程序就是要实现从其他地方读取数据显示到FORM上。
2.Java代码:首先导入SVF.JAR包。JavaBean部分,对文件路径SvfBean.java
public class SvfBean { private String frmFilePath; private String pdfFilePath; private int formMode; public String getFrmFilePath() { return frmFilePath; } public void setFrmFilePath(String frmFilePath) { this.frmFilePath = frmFilePath; } public String getPdfFilePath() { return pdfFilePath; } public void setPdfFilePath(String pdfFilePath) { this.pdfFilePath = pdfFilePath; } public int getFormMode() { return formMode; } public void setFormMode(int formMode) { this.formMode = formMode; } }
生成PDF模块SvfPDFMake.java
import java.util.*; import jp.co.fit.vfreport.Svf; import jp.co.fit.vfreport.Vrw32; public class SvfPDFMake { Vrw32 vrw = new Vrw32(); public int pdfPrint(SvfBean svfbean) { int ret = 0; vrw.VrInit(); vrw.VrSetPrinter("", "PDF"); vrw.VrSetSpoolFileName2(svfbean.getPdfFilePath()); vrw.VrSetForm(svfbean.getFrmFilePath(), svfbean.getFormMode()); HashMap<String,String> headMap = new HashMap<String,String>(); headMap.put("会社名", "xxxxxxxxx株式会社"); headMap.put("住所", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); headMap.put("電話番号", "xxxxxxxxxxxxxxx"); headMap.put("支払条件", "xxxxxxxxxxxxxxx"); headMap.put("納品場所", "南京"); ArrayList listList = new ArrayList(); for(int i=0;i<10;i++) { for(int j=0;j<2;j++) { HashMap listMap = new HashMap(); listMap.put("商品コード", "IPHONE"+i); listMap.put("品番", "I"+i); listMap.put("数量", i); listMap.put("単価", j); listMap.put("明細番号", "1110"+i); listMap.put("備考", "備考"+i); listList.add(listMap); } } doheadDataPrint(headMap); dolistDataPrint(listList); ret = vrw.VrPrint(); ret = vrw.VrQuit(); return ret; } public void doheadDataPrint(HashMap headMap) { Iterator iterator = headMap.keySet().iterator(); while(iterator.hasNext()) { String fieldKey = (String)iterator.next(); String fieldValue = headMap.get(fieldKey).toString(); vrw.VrsOut(fieldKey, fieldValue); } } public void dolistDataPrint(ArrayList listList) { for(int i = 0; i < listList.size(); i++) { HashMap record = (HashMap)listList.get(i); Iterator iterator = record.keySet().iterator(); while(iterator.hasNext()) { String fieldKey = (String)iterator.next(); String fieldValue = record.get(fieldKey).toString(); vrw.VrsOut(fieldKey, fieldValue); } vrw.VrEndRecord(); } } }
主函数SvfMain.java
public class SvfMain { public static void main(String[] args) { // TODO Auto-generated method stub SvfBean sBean = new SvfBean(); sBean.setFrmFilePath("e:\\test.frm"); sBean.setFormMode(5); sBean.setPdfFilePath("e:\\test.pdf"); SvfPDFMake spMake = new SvfPDFMake(); int ret = spMake.pdfPrint(sBean); System.out.println("ret value is:"+ret); } }
当ret返回一个正整数的时候,就表示PDF文件test.pdf生成成功了,可以到对应目录下面查看。