当前位置:首页 > VUE

vue实现套打

2026-02-18 23:59:44VUE

Vue 实现套打功能

套打通常指在已有模板(如合同、票据)上动态填充数据并打印。以下是基于 Vue 的实现方案:

方案一:使用 CSS 控制打印样式

通过 CSS 的 @media print 定义打印时的隐藏/显示规则,结合 Vue 动态渲染数据。

<template>
  <div class="print-template">
    <!-- 固定模板内容 -->
    <div class="template-header">固定表头</div>

    <!-- 动态数据部分 -->
    <div v-for="item in dataList" :key="item.id" class="data-row">
      {{ item.content }}
    </div>
  </div>
  <button @click="handlePrint">打印</button>
</template>

<script>
export default {
  data() {
    return {
      dataList: [{ id: 1, content: "动态数据1" }]
    };
  },
  methods: {
    handlePrint() {
      window.print();
    }
  }
};
</script>

<style>
@media print {
  /* 隐藏非打印元素 */
  button { display: none; }

  /* 调整打印布局 */
  .print-template { margin: 0; }
}
</style>

方案二:PDF.js + 动态表单

若模板为 PDF 文件,可通过 PDF.js 渲染 PDF 并在指定位置叠加动态表单。

vue实现套打

  1. 安装依赖:

    npm install pdfjs-dist
  2. 实现代码:

    vue实现套打

    
    <template>
    <div>
     <div ref="pdfContainer"></div>
     <div class="form-fields">
       <input v-model="formData.field1" placeholder="字段1">
     </div>
     <button @click="generatePDF">生成打印文件</button>
    </div>
    </template>
import * as pdfjsLib from 'pdfjs-dist';

export default { data() { return { formData: { field1: '' } }; }, methods: { async loadPDF() { const pdf = await pdfjsLib.getDocument('template.pdf').promise; const page = await pdf.getPage(1); const viewport = page.getViewport({ scale: 1.5 }); // 渲染到 canvas }, generatePDF() { // 使用 jsPDF 或其他库合并表单数据与 PDF } }, mounted() { this.loadPDF(); } };

```

方案三:Canvas 精准定位

适用于需要像素级精准定位的套打场景。

export default {
  methods: {
    drawTemplate() {
      const canvas = this.$refs.canvas;
      const ctx = canvas.getContext('2d');

      // 绘制背景模板
      const bgImg = new Image();
      bgImg.src = 'template.png';
      bgImg.onload = () => {
        ctx.drawImage(bgImg, 0, 0);

        // 在指定坐标绘制动态数据
        ctx.fillText(this.formData.name, 100, 200);
      };
    },
    printCanvas() {
      const dataUrl = this.$refs.canvas.toDataURL('image/png');
      const win = window.open();
      win.document.write(`<img src="${dataUrl}" onload="window.print()">`);
    }
  }
};

关键注意事项

  • 打印样式调试:使用 Chrome 开发者工具的 Rendering > Emulate CSS media type 模拟打印预览
  • 分页控制:通过 CSS page-break-beforepage-break-after 控制分页
  • 模板对齐:实际打印前需测试模板与纸张的对齐情况,可能需要微调坐标
  • 浏览器兼容性:不同浏览器对打印样式的解析存在差异,需跨浏览器测试

以上方案可根据具体需求组合使用,方案一适合简单套打,方案二适合复杂 PDF 模板,方案三适合需要高精度定位的场景。

标签: vue
分享给朋友:

相关文章

vue实现多选div

vue实现多选div

实现多选 DIV 的基本思路 在 Vue 中实现多选 DIV 功能,可以通过以下方法实现。主要思路是利用 v-model 绑定选中状态,结合 CSS 类名动态切换样式。 数据准备与模板结构 定义一个…

vue实现双折线图

vue实现双折线图

实现双折线图的步骤 安装必要的依赖库(如 ECharts 或 Chart.js),这里以 ECharts 为例: npm install echarts --save 在 Vue 组件中引入 ECh…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…