当前位置:首页 > JavaScript

js实现将网页转换成pdf

2026-04-05 03:59:34JavaScript

使用html2canvas和jsPDF库实现网页转PDF

html2canvas可以将网页内容渲染为canvas,jsPDF再将canvas转为PDF文件。这种方法适合需要精确控制页面样式的场景。

// 安装依赖
npm install html2canvas jspdf

// 代码示例
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

const exportToPDF = async (elementId, filename) => {
  const element = document.getElementById(elementId);
  const canvas = await html2canvas(element);
  const imgData = canvas.toDataURL('image/png');

  const pdf = new jsPDF('p', 'mm', 'a4');
  const imgProps = pdf.getImageProperties(imgData);
  const pdfWidth = pdf.internal.pageSize.getWidth();
  const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

  pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
  pdf.save(filename);
};

使用浏览器原生打印功能

通过CSS媒体查询优化打印样式,利用浏览器自带的"另存为PDF"功能。

js实现将网页转换成pdf

@media print {
  @page {
    size: A4;
    margin: 0;
  }
  body * {
    visibility: hidden;
  }
  .print-area, .print-area * {
    visibility: visible;
  }
  .print-area {
    position: absolute;
    left: 0;
    top: 0;
  }
}
window.print();

使用PDFKit生成结构化PDF

适合需要生成复杂PDF文档的场景,支持文本、图像、矢量图形等。

const PDFDocument = require('pdfkit');
const fs = require('fs');

const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));

doc.fontSize(25).text('网页标题', 100, 80);
doc.fontSize(14).text('网页内容...', 100, 100);

// 添加图像
doc.image('screenshot.png', {
  fit: [250, 300],
  align: 'center',
  valign: 'center'
});

doc.end();

使用Puppeteer进行服务器端转换

通过Headless Chrome实现高质量PDF转换,适合复杂网页或需要批量处理的场景。

js实现将网页转换成pdf

const puppeteer = require('puppeteer');

async function generatePDF(url, outputPath) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url, {waitUntil: 'networkidle0'});

  await page.pdf({
    path: outputPath,
    format: 'A4',
    printBackground: true,
    margin: {
      top: '20mm',
      bottom: '20mm',
      left: '20mm',
      right: '20mm'
    }
  });

  await browser.close();
}

使用wkhtmltopdf工具

基于WebKit引擎的命令行工具,支持从HTML直接生成PDF。

wkhtmltopdf input.html output.pdf

在Node.js中调用:

const { exec } = require('child_process');

exec('wkhtmltopdf http://example.com output.pdf', (error) => {
  if (error) console.error(error);
});

每种方法各有优缺点,html2canvas+jsPDF适合客户端简单转换,Puppeteer适合高质量服务端转换,PDFKit适合编程生成PDF,原生打印适合用户手动操作。选择方案时应考虑浏览器兼容性、性能需求和功能复杂度等因素。

标签: 转换成网页
分享给朋友:

相关文章

vue实现网页换肤

vue实现网页换肤

实现网页换肤的方法 在Vue中实现网页换肤功能,可以通过多种方式完成。以下是几种常见的实现方法: 动态切换CSS类名 通过动态绑定类名,切换不同的主题样式。定义一个主题类名,如theme-dark或…

vue实现网页预览

vue实现网页预览

Vue 实现网页预览的方法 使用 iframe 嵌入 在 Vue 中可以通过 iframe 标签直接嵌入目标网页实现预览。这种方式简单直接,适合静态网页或无需交互的预览场景。 <templat…

vue怎么实现网页跳转

vue怎么实现网页跳转

vue实现网页跳转的方法 使用router-link组件 通过Vue Router提供的<router-link>组件实现声明式导航,适合模板中使用: <router-link t…

使用vue实现简易网页

使用vue实现简易网页

使用 Vue 实现简易网页 创建 Vue 项目 使用 Vue CLI 快速初始化项目,确保已安装 Node.js 和 npm。 运行以下命令创建项目: npm install -g @vue/c…

react拖拽实现网页

react拖拽实现网页

实现React拖拽功能的方法 使用react-dnd库实现拖拽功能 安装依赖:npm install react-dnd react-dnd-html5-backend 创建可拖拽组件时用useDra…

react实现网页加载动画

react实现网页加载动画

使用 CSS 动画实现加载动画 在 React 中可以通过 CSS 动画实现简单的加载效果。创建一个独立的 CSS 文件定义动画关键帧,然后在组件中应用。 CSS 动画示例: @keyframes…