当前位置:首页 > JavaScript

js实现pdf旋转

2026-04-04 15:17:51JavaScript

实现PDF旋转的JavaScript方法

在JavaScript中实现PDF旋转通常需要使用专门的库或API,以下是几种常见的方法:

使用PDF.js库

PDF.js是Mozilla开发的一个开源库,可用于在浏览器中渲染PDF文件并实现旋转功能。

// 加载PDF.js库
const pdfjsLib = require('pdfjs-dist');

// 加载PDF文件
const loadingTask = pdfjsLib.getDocument('yourfile.pdf');
loadingTask.promise.then(function(pdf) {
  // 获取第一页
  return pdf.getPage(1);
}).then(function(page) {
  // 设置旋转角度(90度)
  const rotate = 90;

  // 创建视图
  const viewport = page.getViewport({ scale: 1.0, rotation: rotate });

  // 渲染到canvas
  const canvas = document.getElementById('pdf-canvas');
  const context = canvas.getContext('2d');
  canvas.height = viewport.height;
  canvas.width = viewport.width;

  const renderContext = {
    canvasContext: context,
    viewport: viewport
  };
  page.render(renderContext);
});

使用PDF-lib库

PDF-lib是一个功能强大的库,可以直接修改PDF文件并保存旋转后的版本。

import { PDFDocument } from 'pdf-lib';

async function rotatePDF() {
  // 加载PDF文件
  const existingPdfBytes = await fetch('yourfile.pdf').then(res => res.arrayBuffer());
  const pdfDoc = await PDFDocument.load(existingPdfBytes);

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

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

  // 保存修改后的PDF
  const rotatedPdfBytes = await pdfDoc.save();

  // 下载旋转后的PDF
  download(rotatedPdfBytes, 'rotated.pdf', 'application/pdf');
}

浏览器API配合Canvas

对于简单的PDF显示和旋转,可以使用浏览器API配合Canvas实现。

// 使用FileReader读取PDF文件
const fileInput = document.getElementById('pdf-input');
fileInput.addEventListener('change', function(e) {
  const file = e.target.files[0];
  const reader = new FileReader();

  reader.onload = function(event) {
    const typedArray = new Uint8Array(event.target.result);

    // 使用PDF.js渲染
    pdfjsLib.getDocument(typedArray).promise.then(function(pdf) {
      pdf.getPage(1).then(function(page) {
        const viewport = page.getViewport({ scale: 1.0, rotation: 90 });
        const canvas = document.getElementById('pdf-canvas');
        const context = canvas.getContext('2d');
        canvas.width = viewport.width;
        canvas.height = viewport.height;

        page.render({
          canvasContext: context,
          viewport: viewport
        });
      });
    });
  };
  reader.readAsArrayBuffer(file);
});

服务器端处理

如果需要更复杂的PDF旋转操作,可以考虑使用服务器端库如Node.js的pdfkit。

js实现pdf旋转

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

// 创建新PDF文档
const doc = new PDFDocument({ autoFirstPage: false });

// 添加页面并旋转
doc.addPage({ size: [612, 792], rotation: 90 });
doc.text('Rotated Text', 50, 50);

// 保存文件
doc.pipe(fs.createWriteStream('rotated.pdf'));
doc.end();

注意事项

  • 旋转角度通常只能是90度的倍数(0, 90, 180, 270)
  • 某些PDF库可能在旋转后需要调整页面尺寸
  • 对于批量处理,建议使用专门的PDF处理工具
  • 浏览器端处理大型PDF文件可能导致性能问题

以上方法可以根据具体需求选择,PDF-lib和PDF.js是最常用的客户端解决方案。

标签: jspdf
分享给朋友:

相关文章

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

节流js实现

节流js实现

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…