2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java-pdf-itext7 itextpdf 生成pdf 文档 定制票据打印

java-pdf-itext7 itextpdf 生成pdf 文档 定制票据打印

时间:2020-10-19 18:05:55

相关推荐

java-pdf-itext7 itextpdf 生成pdf 文档 定制票据打印

1、如果是收据或者其他不是A4大小的票据,首先将票据用打印机扫描成图片格式,用ps等工具裁剪成实际票据的大小备用。

2、设计一张实际票据大小的空白pdf模板,备用。

3、用Adobe 等pdf编辑工具打开上面制作的空白模板,点击编辑,在更多->背景->添加->选文件->浏览,选中步骤1制作的票据点击确定。

4、在菜单栏中选择准备表单,点击开始,保存到相应的文件夹。

5、在需要填入值的地方添加文本域,设置域名称,需要注意的一点

设置外观->文字大小选项中,一定设置文字大小和

字体(实际操作中,如果填入值只涉及数字不需要,如果有汉字最好设置一下,后期赋值很可能页面不显示汉字)

6、添加完文本域,选择工具,编辑->更多->背景->删除,删除背景,只留下文本域,保存成模板。

至此,itextpdf模板制作完成。下来就是往里面进行赋值,将生成的临时文件按文件流返回给前端,进行打印即可。

代码如下:

//预缴款收据@Overridepublic String queryByPdfPrint(PdfPrintVo pdfPrintVo, String templateName, String type) {//服务器地址String upFiles = uploadpath;String files = "files";String temp = "pdfPrint";//查询模板的位置 File.separator 表示路径中的\或者/String templatePath = upFiles + File.separator + files + File.separator + temp + File.separator + templateName ;if (templatePath.contains("\\")) {templatePath = templatePath.replace("\\", "/");}ElderInfo elderInfo = elderInfoService.getOne(new QueryWrapper<ElderInfo>().eq("elder_number",pdfPrintVo.getElderNumber()).orderByAsc("create_time").last("limit 1"));File file = new File(upFiles + File.separator + files + File.separator + elderInfo.getId());if (!file.exists()) {file.mkdirs();// 不存在则创建根目录}String newPDFPath = file.getPath() + File.separator + templateName;if (newPDFPath.contains("\\")) {newPDFPath = newPDFPath.replace("\\", "/");}PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {out = new FileOutputStream(newPDFPath);//输出流reader = new PdfReader(templatePath);//读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);//方法二:使用iTextAsian.jar中的字体BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);Font font = new Font(baseFont);AcroFields form = stamper.getAcroFields();java.util.Iterator<String> it = form.getFields().keySet().iterator();if (type.equals(PdfPrintConstant.TYPE1)){while (it.hasNext()) {String name = it.next().toString();String sex = it.next().toString();(StringUtils.isBlank(String.valueOf(pdfPrintVo.getEName())) ? "":String.valueOf(pdfPrintVo.getEName())));form.setField(sex, (StringUtils.isBlank(String.valueOf(pdfPrintVo.getSex())) ? "":String.valueOf(pdfPrintVo.getSex())));}}stamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();doc.add(new Paragraph("解决中文问题了!",font));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);} catch (Exception e) {e.printStackTrace();}return newPDFPath;}

@AutoLog(value = "根据id和type,获取PDF流")@ApiOperation(value="根据id和type,获取PDF流", notes="根据id和type,获取PDF流")@RequestMapping(value = "/preview", method = RequestMethod.GET)public void getTicketPDF(@RequestParam(name="id",required=true) @ApiParam(value = "费用结算传老人id,预缴传id") String id, @RequestParam(name="type",required=true) @ApiParam(value = "1 预缴 2费用结算") String type,HttpServletRequest request, HttpServletResponse response){//获取模板数据String templateFile = null;PdfPrintVo pdfPrintVo = new PdfPrintVo();if (type.equals(PdfPrintConstant.TYPE1)){//查询预缴收款pdfPrintVo = costPayAdvanceService.listQueryByType1(id);}else {pdfPrintVo = costRetreatSettleService.queryPdfInfo(id);}if (pdfPrintVo!=null){if (type.equals(PdfPrintConstant.TYPE1)){templateFile = costPayAdvanceService.queryByPdfPrint(pdfPrintVo, PdfPrintConstant.YJSJ,type);}else if (type.equals(PdfPrintConstant.TYPE2)){templateFile = costPayAdvanceService.queryByPdfPrint(pdfPrintVo, PdfPrintConstant.JSPJ,type);}File file = new File(templateFile);if (file.exists()) {byte[] data = null;FileInputStream input=null;try {input= new FileInputStream(file);data = new byte[input.available()];input.read(data);response.getOutputStream().write(data);} catch (Exception e) {System.out.println("pdf文件处理异常:" + e);}finally{try {if(input!=null){input.close();}} catch (IOException e) {e.printStackTrace();}}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。