当前位置:首页 > 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,原生打印适合用户手动操作。选择方案时应考虑浏览器兼容性、性能需求和功能复杂度等因素。

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

相关文章

用css制作淘宝网页

用css制作淘宝网页

页面布局设计 淘宝网页通常采用响应式布局,确保在不同设备上都能良好显示。主要结构包括顶部导航栏、搜索栏、轮播图、商品分类展示和页脚。 使用CSS的Flexbox或Grid布局可以快速实现这些结构。F…

网页登录实现vue

网页登录实现vue

使用 Vue 实现网页登录功能 创建 Vue 项目 使用 Vue CLI 初始化项目,运行命令 vue create login-demo 选择默认配置或手动配置项目。 安装必要依赖如 axios…

vue实现网页分页

vue实现网页分页

Vue 实现网页分页的方法 使用计算属性实现分页 在 Vue 中可以通过计算属性对数据进行分页处理。定义一个 currentPage 和 pageSize,利用计算属性返回当前页的数据。 data(…

vue框架实现网页

vue框架实现网页

Vue框架实现网页的基本步骤 Vue.js是一个渐进式JavaScript框架,用于构建用户界面。以下是使用Vue框架实现网页的核心步骤。 安装Vue.js 通过CDN引入Vue.js是最简单的方式…

react实现刷新网页

react实现刷新网页

刷新网页的方法 在React中实现网页刷新可以通过多种方式实现,以下是几种常见的方法: 使用window.location.reload() 调用浏览器原生的window.location.relo…

js实现将网页转换成pdf

js实现将网页转换成pdf

使用html2pdf.js库 html2pdf.js是一个轻量级的JavaScript库,可以将HTML元素转换为PDF文件。它基于jsPDF和html2canvas,支持自定义选项。 安装方式:…