SVF账票的PDF文件生成

     在对日项目中,有种要把FORM内容生成PDF文件的业务。原理就是首先制作frm文件,然后动态设置值到表单对应项,最后打印成PDF。
      使用SVF.jar包来开发。
      1.frm文件的绘制,如下图:
     
SVF账票的PDF文件生成_第1张图片
     每个部分类似控件,每个控件都有属性,类型于可视化编程的意思。蓝色字体是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生成成功了,可以到对应目录下面查看。

你可能感兴趣的:(编程,J#)