当前位置:首页 > JavaScript

js实现打印图片

2026-04-04 10:29:41JavaScript

使用Canvas实现图片打印

通过Canvas将图片绘制到画布上,再通过浏览器打印功能输出

function printImage(imageUrl) {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  const img = new Image();

  img.crossOrigin = 'Anonymous';
  img.onload = function() {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);

    const dataUrl = canvas.toDataURL('image/png');
    const printWindow = window.open('', '_blank');
    printWindow.document.write(`<img src="${dataUrl}" style="max-width:100%">`);
    printWindow.document.close();
    printWindow.focus();
    printWindow.print();
  };
  img.src = imageUrl;
}

使用CSS媒体查询控制打印样式

通过CSS设置打印时的页面样式,隐藏不必要元素

function printImageWithCSS(imageUrl) {
  const printContent = `
    <style>
      @media print {
        body * { visibility: hidden; }
        .print-container, .print-container * { visibility: visible; }
        .print-container { position: absolute; left: 0; top: 0; }
      }
    </style>
    <div class="print-container">
      <img src="${imageUrl}" style="max-width:100%">
    </div>
  `;

  const printWindow = window.open('', '_blank');
  printWindow.document.write(printContent);
  printWindow.document.close();
  printWindow.focus();
  printWindow.print();
}

使用iframe实现静默打印

创建隐藏iframe加载图片后进行打印

js实现打印图片

function printImageViaIframe(imageUrl) {
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  document.body.appendChild(iframe);

  iframe.onload = function() {
    const content = `
      <img src="${imageUrl}" onload="window.print()" style="max-width:100%">
    `;
    iframe.contentDocument.write(content);
    iframe.contentDocument.close();
  };

  iframe.src = 'about:blank';
}

处理跨域图片打印

当图片存在跨域限制时的解决方案

function printCrossOriginImage(imageUrl) {
  fetch(imageUrl)
    .then(response => response.blob())
    .then(blob => {
      const reader = new FileReader();
      reader.onload = function() {
        const printWindow = window.open('', '_blank');
        printWindow.document.write(`<img src="${reader.result}">`);
        printWindow.document.close();
        printWindow.focus();
        printWindow.print();
      };
      reader.readAsDataURL(blob);
    })
    .catch(error => console.error('Error:', error));
}

多图片打印控制

批量打印多张图片的实现方法

js实现打印图片

function printMultipleImages(imageUrls) {
  const printWindow = window.open('', '_blank');
  let html = '<style>img { margin: 10px; max-width: 90%; }</style>';

  imageUrls.forEach(url => {
    html += `<img src="${url}">`;
  });

  printWindow.document.write(html);
  printWindow.document.close();
  printWindow.focus();

  // 添加延时确保图片加载完成
  setTimeout(() => {
    printWindow.print();
  }, 500);
}

注意事项

打印前确保图片已完全加载,避免空白或截断问题

对于大尺寸图片,建议在打印前进行适当缩放处理

某些浏览器可能阻止弹出窗口,需要用户允许弹出权限

考虑添加打印取消和重试的异常处理逻辑

标签: 图片js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…