iText5使用绝对定位制作pdf打印针式发票,支持跳页

news/2024/11/15 0:29:58/
1、定义纸张大小,通过对比A4的大小计算相应发票大小的值

A4纸的大小为210mm×297mm,对应的Rectangle为new Rectangle(595,842)

2、加载中文字体,中文字体采用的是simsun.ttc,Windows下有对应的字体文件
        Resource resource = new ClassPathResource("simsun.ttc");byte[] ttfAfm = StreamUtil.inputStreamToArray(resource.getInputStream());//注意,字体后边带有,0BaseFont baseFont = BaseFont.createFont("simsun.ttc,0", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED, true, ttfAfm, null, false);
3、使用绝对定位输出发票信息

用的类为PdfContentByte,创建方式为PdfContentByte cb = writer.getDirectContent();
开始输出:cb.beginText();
设置字体:cb.setFontAndSize(baseFont, 11);
输出定位信息:cb.showTextAligned(PdfContentByte.ALIGN_LEFT, DateUtil.format(new Date(), “yyyy/MM/dd”), 100, 225, 0);
x、y的坐标对应的原点为左下角
停止输出: cb.endText();
换页:document.newPage();

5、完整代码
 Document document = new Document(new Rectangle(603.54f, 289.01f));PdfWriter writer = PdfWriter.getInstance(document, outputStream);document.open();PdfContentByte cb = writer.getDirectContent();Resource resource = new ClassPathResource("simsun.ttc");byte[] ttfAfm = StreamUtil.inputStreamToArray(resource.getInputStream());BaseFont baseFont = BaseFont.createFont("simsun.ttc,0", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED, true, ttfAfm, null, false);List<TbTown> townList = townMapper.selectTbTownList(new TbTown());Map<Integer, String> townMap = townList.stream().collect(Collectors.toMap(TbTown::getId,TbTown::getMeterReader));for (TbWaterRecord waterRecord : list) {cb.beginText();cb.setFontAndSize(baseFont, 11);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, DateUtil.format(new Date(), "yyyy/MM/dd"), 100, 225, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, waterRecord.getWaterMonth().substring(0, 4), 415, 225, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, waterRecord.getWaterMonth().substring(4, 6), 465, 225, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, waterRecord.getCustomerName(), 105, 202, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getCustomerSeq()), 465, 202, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getLastEndNo()), 105, 186, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getCurrEndNo()), 260, 186, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getRealConsumption()), 400, 186,0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "一阶梯", 100, 142, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getRealConsumption()), 205, 142,0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getPrice()), 320, 142, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getAmount()), 390, 142, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "二阶梯", 100, 129, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "三阶梯", 100, 115, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "水资源税", 100, 102, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, Convert.digitToChinese(waterRecord.getAmount()), 150, 82, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, String.valueOf(waterRecord.getAmount()), 415, 82, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, createName, 220, 53, 0);cb.showTextAligned(PdfContentByte.ALIGN_LEFT, townMap.get(waterRecord.getTownId()), 80, 53, 0);cb.endText();document.newPage();}document.close();

注意调整打印机的字体,以及定义好打印机发票的纸张大小,否则打印多了跳页会有问题


http://www.ppmy.cn/news/702842.html

相关文章

pcb布线规则设置

去除SilkToSilkClearance和SilkToSolderMaskClearance选项。 Minimum Solder Mask Sliver 如果其他安全间距相关的规则设置好了&#xff08;例如焊盘、过孔等等&#xff09;&#xff0c;基本没有影响。当然&#xff0c;如果是两个开窗属性的电气属性图形中间想要做出绿油桥&…

USB对拷线Linux,USB对拷线设置教程

USB对拷线可实现两台电脑间资料直接互传&#xff0c;无需使用U盘硬盘等&#xff0c;共享电脑快速转移文件更方便。 USB对拷功能&#xff1a;电脑连接电脑之间的数据线&#xff0c;用于两个电脑之间互相传输数据&#xff0c;共享一套鼠标键盘操作。 USB对拷线支持系统&#xff1…

AD的PCB等长线设置

信号为了同步到达&#xff0c;阻抗匹配等就需要走等长线&#xff08;蛇形线&#xff09;&#xff0c;下边的操作用到的AD21&#xff0c;AD别的版本大致思路一样。 1、首先对需要走等长线建立一个类别&#xff0c;在PCB中建立分类&#xff0c;如图所示 2、接着进入类别界面后新建…

如何自动批量查询手机号归属地?

我们在工作生活中可能会收集到很多用户的手机号&#xff0c;我们如果想获取手机号归属地&#xff0c;只能一个个人工查询。如果数据量较多的情况就会比较耗费时间。有没有什么方法可以自动查询手机号归属地呢&#xff1f;当然可以&#xff0c;并且这个方法还是免费的。 首先&a…

升级mac系统正在计算机,USB对拷线在苹果Mac系统的升级说明

在使用绿联USB对拷线时&#xff0c;若您的苹果电脑系统为OS 10.15的Catalina&#xff0c;可通过安装本升级工具来继续使用&#xff0c;同时也可兼容低版本的MAC OS。 USB对拷线在苹果Mac系统的升级步骤如下&#xff1a; 一、下载升级工具 ①、解压文件&#xff1a;将此压缩文件…

怎样在Word中装订书籍

怎样让word文件打印出来类似一本书10我已经把页面设置设置好了&#xff0c;把页码也弄好了 可是我想正反面的打印&#xff0c;怎样才能让打印出来的文件页码顺序是连续的 再装订时能方便装订&#xff0c;就象一本书那样的 &#xff01;~ 我的经验是&#xff0c;如 零零玖 那样 …

图文广告装订

大家好&#xff0c;我是小爽&#xff0c;一名从事图文广告行业的设计师。 在图文广告行业&#xff0c;图文装订是在图文领域最为常见的业务了&#xff0c;有个好的装订&#xff0c;就等于您有了一份漂亮的颜值&#xff0c;尤其是在投标过程中&#xff0c;一定会让人忍不住多看…

AD软件布线设置

在使用AD软件布线时&#xff0c;遇到以下情况&#xff0c;当我单击鼠标时&#xff0c;会同时布两段线&#xff0c;在哪里设置可以取消呢&#xff1f;我想要点一下鼠标&#xff0c;布一段线。