当前位置:首页 > JavaScript

js实现pdf旋转

2026-01-30 23:28:11JavaScript

使用PDF.js实现PDF旋转

PDF.js是一个由Mozilla开发的JavaScript库,用于在浏览器中渲染PDF文件。通过PDF.js可以实现PDF页面的旋转功能。

安装PDF.js库:

<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script>

旋转PDF页面的代码示例:

// 初始化PDF.js
pdfjsLib.getDocument('yourfile.pdf').promise.then(function(pdf) {
  // 获取第一页
  pdf.getPage(1).then(function(page) {
    const viewport = page.getViewport({ scale: 1.0 });

    // 创建canvas元素
    const canvas = document.getElementById('pdf-canvas');
    const context = canvas.getContext('2d');
    canvas.height = viewport.height;
    canvas.width = viewport.width;

    // 渲染页面(不旋转)
    page.render({
      canvasContext: context,
      viewport: viewport
    });

    // 旋转90度
    const rotatedViewport = page.getViewport({ 
      scale: 1.0,
      rotation: 90 
    });

    canvas.height = rotatedViewport.height;
    canvas.width = rotatedViewport.width;

    page.render({
      canvasContext: context,
      viewport: rotatedViewport
    });
  });
});

使用PDF-LIB实现PDF旋转

PDF-LIB是一个更现代的JavaScript库,用于创建和修改PDF文档。

js实现pdf旋转

安装PDF-LIB:

npm install pdf-lib

旋转PDF页面的代码示例:

js实现pdf旋转

import { PDFDocument } from 'pdf-lib';

async function rotatePdf() {
  // 加载现有PDF
  const existingPdfBytes = await fetch('input.pdf').then(res => res.arrayBuffer());
  const pdfDoc = await PDFDocument.load(existingPdfBytes);

  // 获取所有页面
  const pages = pdfDoc.getPages();

  // 旋转每一页(90度)
  pages.forEach(page => {
    page.setRotation(90);
  });

  // 保存修改后的PDF
  const pdfBytes = await pdfDoc.save();
  download(pdfBytes, 'rotated.pdf', 'application/pdf');
}

function download(data, filename, type) {
  const blob = new Blob([data], { type });
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = filename;
  link.click();
}

使用浏览器打印API旋转PDF

对于简单的查看场景,可以使用浏览器的打印功能实现旋转:

function printWithRotation() {
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  iframe.src = 'document.pdf';
  document.body.appendChild(iframe);

  iframe.onload = function() {
    setTimeout(() => {
      iframe.contentWindow.print();
      document.body.removeChild(iframe);
    }, 1000);
  };

  // 在打印对话框中手动选择旋转选项
}

使用服务端旋转PDF

如果需要永久旋转PDF文件,可以考虑使用服务端解决方案:

Node.js示例(使用pdf-lib):

const fs = require('fs');
const { PDFDocument } = require('pdf-lib');

async function rotatePdfFile(inputPath, outputPath) {
  const pdfBytes = fs.readFileSync(inputPath);
  const pdfDoc = await PDFDocument.load(pdfBytes);

  const pages = pdfDoc.getPages();
  pages.forEach(page => page.setRotation(180)); // 旋转180度

  const rotatedPdf = await pdfDoc.save();
  fs.writeFileSync(outputPath, rotatedPdf);
}

rotatePdfFile('input.pdf', 'output.pdf');

每种方法适用于不同场景:PDF.js适合浏览器内查看时临时旋转,PDF-LIB适合需要修改并保存PDF文件,服务端方案适合批量处理PDF文件。

标签: jspdf
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…