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();}}}}}

java-pdf-itext7、itextpdf 生成pdf 文档 定制票据打印相关推荐

  1. JAVA实现模板word文档导入,Java依据word模板生成word文档之后台解析和实现及部分代码(一)...

    Java根据word模板生成word文档之后台解析和实现及部分代码(一) 后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供的相关方法来实现替换. ...

  2. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  3. Java根据word模板生成word文档并转成PDF文件

    1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 生成的xml ...

  4. java利用freemarker动态生成word文档及动态表格

    这里写自定义目录标题 目标 准备 实现 处理模板 java实现 验证 目标 根据给定word模板,动态填充指定内容,并输出为新的word文档. 准备 1.模板: 准备一份目标格式的word文档,如:w ...

  5. java根据模板动态生成word文档

    模板文档 首先,需要创建一个word模板,我的模板例子如下: 动态生成的文档 根据java代码动态的修改模板生成自己想要的文档,结果如下: 具体代码 代码操作如下:其中进行了文本的替换,图片的插入,以 ...

  6. java后台利用模板生成Word文档提供前台下载

    2016.12.06更新,java后台利用Apache poi生成Excel文档提供前台下载,博客链接http://blog.csdn.net/u010251278/article/details/5 ...

  7. 【Java】命令行生成JavaDoc文档

    编写简单的文档注释 安利 → JavaDoc文档注释详解 /*** @author BlankSpace* @version 1.0*/ public class JavaDocTest {/*** ...

  8. JAVA通过xml模板生成DOCX文档

    准备工作: 1.xml模版,获取方式为docx文件winrar方式打开,取出document.xml 2.将内容格式化后修改需要替换的内容为freemarker标签,如下: 3.文件准备好后存放到某个 ...

  9. 【Java】使用模板生成word文档到服务器,并下载

    前台js只需要一个方法, 1.Action:说明:dataMap是需要展示的数据, String rootPath = SaveFileUtil.FILE_PATH;此处是为了判断盘符的,win系统和 ...

  10. JAVA Freemarker + Word 模板 生成 Word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的东替换)...

    1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...

最新文章

  1. gdoi2017总结
  2. 03_运算符、键盘录入、流程控制
  3. .NET 6 新特性 Parallel ForEachAsync
  4. python 数据分析找到老外最喜欢的中国美食【完整代码】
  5. 《SAS编程与数据挖掘商业案例》学习笔记之九
  6. GridView控件RowDataBound事件中获取列字段的几种途径
  7. 如何建立最初的三层架构[转]
  8. 使用Idea 配置maven
  9. jquery name选择器_jQuery学习(1)
  10. atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享
  11. atom n270 cpu linux,英特尔Atom Z530和Intel Pentium-M 733 那个处理能力强_intel atom z530
  12. kubernetes更换IP地址重新初始化master节点
  13. 电脑有网,microsoft edge浏览器无法上网
  14. JavaScript execCommand函数
  15. Dalvik虚拟机简介
  16. Linux上使用ZFS
  17. 面渣逆袭:Spring三十五问,四万字+五十图详解,建议收藏。
  18. VC++按F5出现No matching symbolic info found程序运行完直接退出
  19. Qt中使用Doxygen注释生成总结
  20. 阿尔法ct_同济CT “阿尔法狗” 5秒读结果 阅片水平已接近主治医师!

热门文章

  1. 由一篇作文《一件有意义的事》展开的
  2. php调用声卡,图文讲解美国ART USB Dual Pre声卡多种使用方法!
  3. 文献解读|DPP-4i治疗诱导的肠道微生物群的改变可改善葡萄糖稳态
  4. linux下载tftpd服务,Linux tftpd服务安装与配置
  5. 2021年度中国商业地产100强揭晓,排名前十位变化不大
  6. adb shell 命令
  7. SAP Script教程:SE71、SE78、SCC1、VF03、SO10-013
  8. 大数据可视化实验六、七:大数据可视化工具—Processing(一)(二)
  9. 华为光猫上线流程、注册失败、常见语音故障处理
  10. 【杭电5053】the Sum of Cube