zoukankan      html  css  js  c++  java
  • 后端Itext生成pdf到传到前端,支票打印A4纸

    @GetMapping(value = "/zppdf/{id}", produces = MediaType.APPLICATION_PDF_VALUE)
        public ResponseEntity<InputStreamResource> index(@Valid @PathVariable("id") int id) throws DocumentException, IOException {
    
            var headers = new HttpHeaders();
            headers.add("Content-Disposition", "inline; filename=demo.pdf");
            Lrxgzp it = lrxgzpRepository.findById(id).orElseThrow();
            var bis = createDocument(toDyView(it));
            return ResponseEntity
                    .ok()
                    .headers(headers)
                    .contentType(MediaType.APPLICATION_PDF)
                    .body(new InputStreamResource(bis));
    
        }
    
    private ByteArrayInputStream createDocument(LrxgzpDyView view) throws DocumentException, IOException {
           /* Rectangle rectangle = new Rectangle(637.8f, 226.77f);
            var document = new Document(rectangle);*/
            var document = new Document(PageSize.A4);
            var out = new ByteArrayOutputStream();
            document.setMargins(0, 0, 0, 0);
            //document.setPageSize(PageSize.A4);
            PdfWriter.getInstance(document, out);
            document.open();
            addContent(document, view);
            document.close();
            return new ByteArrayInputStream(out.toByteArray());
        }
    
    
    private void addContent(Document document, LrxgzpDyView view) throws DocumentException, IOException {
           /* var preface = new Paragraph("零一二三四五六七八九十".repeat(20), pdfFontHelper.getOrange());
    
            var table = new PdfPTable(1);
            table.setHorizontalAlignment(0);
            //可打印宽度为:595.27f - 8.5f
            table.setTotalWidth(595.27f);
            table.setWidths(new int[]{1});
            table.setLockedWidth(true);
            PdfPCell cell = new PdfPCell();
            cell.addElement(preface);
            cell.setPaddingLeft(8.5f);
            cell.disableBorderSide(15);
            table.addCell(cell);*/
            var preface = new Paragraph();
            // add a table
            createTable(preface, view);
            // now add all this to the document
            document.add(preface);
        }
    
        private void createTable(Paragraph preface, LrxgzpDyView view) throws DocumentException, IOException {
            //自己封装好的字体以及大小 new Font(simsun, 9, Font.NORMAL, BaseColor.BLACK);
            Font font1 = pdfFontHelper.getOrange();
            Font font2 = pdfFontHelper.getWatermelon();
    
            var table = new PdfPTable(2);
            table.setHorizontalAlignment(0);
            table.setTotalWidth(595.27f);
            table.setWidths(new int[]{13, 50});
            table.setLockedWidth(true);
    
            //左边
            var tableLeft = new PdfPTable(3);
            tableLeft.setHorizontalAlignment(0);
            tableLeft.setTotalWidth(102.05f);
            tableLeft.setWidths(new int[]{20, 7, 9});
            tableLeft.setLockedWidth(true);
            //左边附加信息
            //设置Paragraph的样式需要在添加进单元格之前设置好
            Paragraph p1 = new Paragraph(view.getZpfjxx(), font1);
            p1.setFirstLineIndent(25.51f);
            p1.setLeading(0f, 1.3f);
            PdfPCell cell = new PdfPCell();
            cell.addElement(p1);
            cell.setColspan(3);
            cell.setFixedHeight(42.52f);
            cell.setMinimumHeight(42.52f);
            //隐藏单元格全部边框
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            //左边出票日期
            Paragraph cprq = new Paragraph(view.getCpYear(), font1);
            //28.35f
            cprq.setFirstLineIndent(29f);
            cprq.setLeading(13f);
            cell = new PdfPCell();
            cell.addElement(cprq);
            cell.setFixedHeight(21.25f);
            cell.setMinimumHeight(21.25f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            Paragraph month = new Paragraph(view.getCpMonth(), font1);
            month.setFirstLineIndent(1.5f);
            month.setLeading(13f);
            cell = new PdfPCell();
            cell.addElement(month);
            cell.setFixedHeight(21.25f);
            cell.setMinimumHeight(21.25f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            Paragraph day = new Paragraph(view.getCpDay(), font1);
            day.setFirstLineIndent(1.5f);
            day.setLeading(13f);
            cell = new PdfPCell();
            cell.addElement(day);
            cell.setFixedHeight(21.25f);
            cell.setMinimumHeight(21.25f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            //左边收款人
            Paragraph p2 = new Paragraph(view.getSkrName(), font1);
            //22.68f
            p2.setFirstLineIndent(23.5f);
            p2.setLeading(11f);
            cell = new PdfPCell();
            cell.addElement(p2);
            cell.setColspan(3);
            cell.setFixedHeight(28.35f);
            cell.setMinimumHeight(28.35f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            //左边金额
            Paragraph je = new Paragraph(view.getJe(), font1);
            je.setFirstLineIndent(23.5f);
            je.setLeading(8f);
            cell = new PdfPCell();
            cell.addElement(je);
            cell.setColspan(3);
            cell.setFixedHeight(14.17f);
            cell.setMinimumHeight(14.17f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
            //左边用途
            Paragraph yt = new Paragraph(view.getZpyt(), font1);
            yt.setFirstLineIndent(23.5f);
            yt.setLeading(8f);
            cell = new PdfPCell();
            cell.addElement(yt);
            cell.setColspan(3);
            cell.setFixedHeight(14.17f);
            cell.setMinimumHeight(14.17f);
            cell.disableBorderSide(15);
            tableLeft.addCell(cell);
    
            //左边最大单元格
            var c1 = new PdfPCell(tableLeft);
            c1.setPaddingLeft(8.5f);
            c1.setPaddingTop(75.12f);
            c1.setPaddingRight(8.5f);
            c1.disableBorderSide(15);
            c1.setUseVariableBorders(true);
            table.addCell(c1);
    
            //右边大单元格
            PdfPCell c2 = new PdfPCell();
            c2.setPaddingLeft(49.6f);
            //42.52f
            c2.setPaddingTop(41.1f);
            c2.disableBorderSide(15);
            c2.setHorizontalAlignment(Element.ALIGN_LEFT);
            //右边内容定位表格
            var tablePos = new PdfPTable(1);
            tablePos.setTotalWidth(413.85f);
            tablePos.setLockedWidth(true);
            PdfPCell tablePosCell = new PdfPCell();
            tablePosCell.setPaddingLeft(0f);
            tablePosCell.setPaddingTop(0f);
            tablePosCell.disableBorderSide(15);
            tablePosCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
            tablePosCell.setHorizontalAlignment(Element.ALIGN_LEFT);
    
            //右边出票日期
            var table2 = new PdfPTable(8);
            table2.setTotalWidth(413.85f);
            table2.setWidths(new int[]{23, 18, 3, 13, 3, 13, 3, 70});
            table2.setLockedWidth(true);
            PdfPCell ce = new PdfPCell();
            ce.disableBorderSide(15);
            table2.addCell(ce);
            //右边出票日期大写年
            Paragraph yearDx = new Paragraph(view.getCpYearDx(), font1);
            yearDx.setLeading(9f);
            yearDx.setAlignment(Element.ALIGN_CENTER);
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            ce.addElement(yearDx);
            ce.setFixedHeight(14.17f);
            ce.setMinimumHeight(14.17f);
            table2.addCell(ce);
    
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            table2.addCell(ce);
    
            //右边出票日期大写月
            Paragraph monthDx = new Paragraph(view.getCpMonthDx(), font1);
            monthDx.setLeading(9f);
            monthDx.setAlignment(Element.ALIGN_CENTER);
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            ce.addElement(monthDx);
            ce.setFixedHeight(14.17f);
            ce.setMinimumHeight(14.17f);
            table2.addCell(ce);
    
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            table2.addCell(ce);
    
            //右边出票日期大写日
            Paragraph dayDx = new Paragraph(view.getCpDayDx(), font1);
            dayDx.setLeading(9f);
            dayDx.setAlignment(Element.ALIGN_CENTER);
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            ce.addElement(dayDx);
            ce.setFixedHeight(14.17f);
            ce.setMinimumHeight(14.17f);
            table2.addCell(ce);
    
            ce= new PdfPCell();
            ce.disableBorderSide(15);
            table2.addCell(ce);
    
            ce = new PdfPCell();
            ce.disableBorderSide(15);
            table2.addCell(ce);
            tablePosCell.addElement(table2);
    
            //右边收款人
            var rSkrTable = new PdfPTable(1);
            rSkrTable.setTotalWidth(413.85f);
            rSkrTable.setWidths(new int[]{1});
            rSkrTable.setLockedWidth(true);
            Paragraph pskr = new Paragraph(14.17f, view.getSkrName(), font1);
            pskr.setFirstLineIndent(31.18f);
            pskr.setLeading(10f);
            PdfPCell rSkrTablecell = new PdfPCell();
            rSkrTablecell.disableBorderSide(15);
            rSkrTablecell.setFixedHeight(17.01f);
            rSkrTablecell.addElement(pskr);
            rSkrTable.addCell(rSkrTablecell);
            tablePosCell.addElement(rSkrTable);
    
            //右边金额
            var table3 = new PdfPTable(13);
            table3.setTotalWidth(413.85f);
            table3.setWidths(new int[]{13, 89, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4});
            table3.setLockedWidth(true);
            PdfPCell table3cell1 = new PdfPCell();
            table3cell1.disableBorderSide(15);
            table3cell1.setRowspan(2);
            table3.addCell(table3cell1);
            PdfPCell table3cell2 = new PdfPCell();
            table3cell2.disableBorderSide(15);
            table3cell2.setRowspan(2);
            table3cell2.setFixedHeight(25.51f);
            //右边大写金额
            Paragraph jeDx = new Paragraph(view.getJeDx(), font2);
            jeDx.setLeading(16f);
            table3cell2.addElement(jeDx);
            table3.addCell(table3cell2);
    
            for (int i = 0; i < 11; i++) {
                PdfPCell cell2 = new PdfPCell();
                cell2.disableBorderSide(15);
                cell2.setFixedHeight(11.34f);
                table3.addCell(cell2);
            }
    
            PdfPCell table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je1 = new Paragraph(view.getYw(), font1);
            je1.setLeading(10f);
            table3c3.addElement(je1);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je11 = new Paragraph(view.getQww(), font1);
            je11.setLeading(10f);
            table3c3.addElement(je11);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je2 = new Paragraph(view.getBww(), font1);
            je2.setLeading(10f);
            table3c3.addElement(je2);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je3 = new Paragraph(view.getSww(), font1);
            je3.setLeading(10f);
            table3c3.addElement(je3);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je4 = new Paragraph(view.getWw(), font1);
            je4.setLeading(10f);
            table3c3.addElement(je4);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je5 = new Paragraph(view.getQw(), font1);
            je5.setLeading(10f);
            table3c3.addElement(je5);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je6 = new Paragraph(view.getBw(), font1);
            je6.setLeading(10f);
            table3c3.addElement(je6);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je7 = new Paragraph(view.getSw(), font1);
            je7.setLeading(10f);
            table3c3.addElement(je7);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je8 = new Paragraph(view.getGw(), font1);
            je8.setLeading(10f);
            table3c3.addElement(je8);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je9 = new Paragraph(view.getSfw(), font1);
            je9.setLeading(10f);
            table3c3.addElement(je9);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            table3c3 = new PdfPCell();
            table3c3.disableBorderSide(15);
            Paragraph je10 = new Paragraph(view.getBfw(), font1);
            je10.setLeading(10f);
            table3c3.addElement(je10);
            table3c3.setFixedHeight(14.17f);
            table3.addCell(table3c3);
    
            tablePosCell.addElement(table3);
    
            //用途密码
            var table4 = new PdfPTable(2);
            table4.setTotalWidth(413.85f);
            table4.setWidths(new int[]{1, 1});
            table4.setLockedWidth(true);
            PdfPCell table4cell = new PdfPCell();
            table4cell.disableBorderSide(15);
            Paragraph table4p1 = new Paragraph(view.getZpyt(), font1);
            table4p1.setFirstLineIndent(19.84f);
            table4cell.addElement(table4p1);
            table4cell.setPaddingTop(3f);
            table4.addCell(table4cell);
            table4cell = new PdfPCell();
            table4cell.disableBorderSide(15);
            Paragraph table4p2 = new Paragraph(view.getZpmm(), font1);
            table4p2.setFirstLineIndent(56.69f);
            table4cell.addElement(table4p2);
            table4cell.setPaddingTop(3f);
            table4.addCell(table4cell);
            tablePosCell.addElement(table4);
    
            tablePos.addCell(tablePosCell);
            c2.addElement(tablePos);
            table.addCell(c2);
            preface.add(table);
    
        }

    1毫米 对应代码中 72/25.4 f,即想要宽度为1mm,则需要在代码中设置 2.83f (浮点数)

    前端我用vue+elementUI

       <el-dialog title :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
            <div align="center">
              <span>选择支票模板</span>
              <el-select v-model="zpmb" placeholder="请选择支票模板" @change="changeZpmb">
                <el-option v-for="it in zpmbs" :key="it.num" :label="it.name" :value="it.num" />
              </el-select>
            </div>
            <div align="center" style="margin-top:20px;">
              <span>
                <el-button @click="handleClose">取 消</el-button>
                <el-link
                  :href="ahref"
                  target="_blank"
                  :disabled="disableYl"
                  @click="dialogVisible=false"
                >
                  <el-button type="primary" :disabled="disableYl" @click="dialogVisible=false">预览</el-button>
                </el-link>
              </span>
            </div>
          </el-dialog>

    也可以直接用a标签

    this.ahref = `/api/xxxx/lrxgzp/zppdf/${this.selectllist[0].id}`;

    效果如下图

    打印到支票上效果图

  • 相关阅读:
    LINUX下mysql的大小写是否区分设置 转
    在CentOS搭建Git服务器 转
    Idea实现WebService实例 转
    Intellij 中的git操作 转!
    Maven配置 settings.xml 转
    Maven使用第三方jar文件的两种方法 转
    Maven : 将Jar安装到本地仓库和Jar上传到私服 转
    maven 私服 配置 转
    Maven 私服配置 转
    Linux 下挂载硬盘的 方法
  • 原文地址:https://www.cnblogs.com/pzw23/p/13441950.html
Copyright © 2011-2022 走看看