1.首先做好一个模板,想打印图片的话下载一个图片模板,打印表格的话直接建一个表格。然后在word里面打开。保存为PDF格式,然后下载Adobe Acrobat DC,没有的话在我的第一个链接可以直接下载。
2下载以后把PDF打开,点击准备表单。如果是表格的话,在空的表格里面会自动生成打印是要加入数据的框;图片只会生成一个,可以复制粘贴。框可以自己移动、调大小。
(注意:如上方法里面插入字段是按照图片上由上到下、从左至右的顺序插入的)
3.输入框做好了直接保存就好了。
4.打印方法:第一段绿色是把保存的PDF模板URL放入,和你要下载PDF放的URL,我的url是用的动态的,放在服务器文件下。你也可以固定路径保存,第二个绿色字段也是自己加的,自己想放什么把什么字段传过来就好了。其他的复制就好了。
@RequestMapping(value = "/export")
public Map<String,Object> printinvoice() throws Exception{
//生成pdf文件程序
String templatePath = "F:/model4.pdf";
// 生成的新文件路径
String url = request.getSession().
getServletContext().getRealPath("/")+"uploadFile\\"+dutyparagraph+".pdf";
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
out = new FileOutputStream(url);// 输出流
reader = new PdfReader(templatePath);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
String[] str = {putCompanyname, dutyparagraph,priceall, depositbank,bankaccount, Companyname };
int i = 0;
java.util.Iterator<String> it = form.getFields().keySet().iterator();
while (it.hasNext()) {
String name = it.next().toString();
form.setField(name, str[i++]);
}
stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
stamper.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException e) {
System.out.println(1);
} catch (DocumentException e) {
System.out.println(2);
}
return null;
}
5.执行完上面的程序就把你所要打印的pdf文件生成了。
6.预览功能:在前台页面展示所保存的pdf文件,
1.需要下载pdfobject.js插件。功能很是强大。在我的第二个链接里面。有两个.js。随便下载一个。其他两个架包是生成二维码的架包,有兴趣可以看下,生成二维码博客也有发。
2.jsp
一个div就搞定了。路径是保存PDF的路径,"#pdf"是id选择器。
执行了方法就直接跳到pdf显示页面了。
我做的是打印发票的,黑色字段是我添加的。显示的PDF就有打印和下载的功能,还可以放大和缩小,还有适应屏幕。功能强大的一匹。
3. 打印数据的话直接前台加如下这句话就可以直接打印当前页面的数据了;
<a href="javascript:print();">打印</a>
7.下载功能
1.把生成pdf文件的下载路径传到下载方法就好了。
@ResponseBody
@RequestMapping(value = "/download")
public String download(@RequestParam String companyname,String url, HttpServletResponse response, HttpServletRequest request) throws Exception{
System.out.println("==========================");
System.out.println("开始下载");
InputStream in = null ;
OutputStream out = null ;
try
{
System.out.println("============================");
System.out.println("全局路径:"+url);
in = new FileInputStream(url); //获取文件的流
System.out.println("============================");
System.out.println("文件输入流:"+in);
int len = 0;
byte buf[] = new byte[1024];//缓存作用
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(companyname + ".pdf", "UTF-8"));
out = response.getOutputStream();//输出流
while( (len = in.read(buf)) > 0 ) //切忌这后面不能加 分号 ”;“
{
out.write(buf, 0, len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取
}
in.close();
out.close();
}finally{
//TODO
}
return null;
over!!!!!!!!
链接
1.链接:http://pan.baidu.com/s/1pKLFYeJ 密码:368z
2.链接:http://pan.baidu.com/s/1dE4zvfN 密码:vntc