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生成成功了,可以到对应目录下面查看。

posted @ 2020-07-15 22:14  mandy3651423  阅读(3090)  评论(0编辑  收藏  举报