当前位置: 首页 > news >正文

图片压缩工具 | 图片生成PDF文档

ℹ️ 需求描述

上一版本发布后,有用户提出想要将图片转换(或者说生成更为贴切)PDF文档,于是有了今天要分享的内容。
功能概述:将用户选择的文件,预处理(如裁剪、旋转)后,绘制到新的 PDF 文件内。

📄 关于PDF

PDF(Portable Document Format,便携式文档格式)是当今最广泛使用的电子文档格式之一,几乎成为数字文档交换的代名词。它的发展历程涉及技术创新、商业竞争和标准化演进。

📜发展简史

  • 1991年,Adobe 联合创始人 John Warnock 提出 “Camelot” 计划,目标是创建一种 跨平台、固定布局的电子文档格式,确保在任何设备上都能正确显示。
  • 1993年,Adobe 正式发布 PDF 1.0,配套推出 Acrobat 1.0(用于创建和阅读 PDF 的工具)。
  • 2008年,Adobe 将 PDF 提交给 ISO(国际标准化组织),使其成为开放标准(ISO 32000-1)。

🚀技术演进

版本发布时间重要改进
PDF 1.01993基础文本、图像支持
PDF 1.52003支持 JPEG2000、图层、增强压缩
PDF/A (2005)长期存档标准适合法律、档案存储
PDF/X (2001)印刷出版标准确保颜色、字体精确输出
PDF 2.0 (2017)最新 ISO 标准强化安全、标签化结构

🌍PDF 的现状(2020s+)

1. 无处不在的应用

  • Web 浏览器:Chrome、Firefox 内置 PDF 阅读器。
  • 移动端:iOS/Android 原生支持 PDF 预览。
  • 云服务:Google Drive、Dropbox 直接解析 PDF。
  • 开发者工具:如 pdf-libPDF.jsApache PDFBox

2. 现代 PDF 生态

  • 可编辑 PDF(Adobe Acrobat、Foxit)。
  • PDF 表单(交互式字段,支持电子签名)。
  • OCR 技术(将扫描件转为可搜索文本)。
  • 3D PDF(嵌入三维模型,用于工程图纸)。

3. 竞争对手

  • Office Open XML(DOCX, PPTX):微软的开放文档格式。
  • EPUB:更适合电子书。
  • Web 技术:HTML + CSS 逐渐替代简单 PDF(如在线报告)。

🧑‍💻 技术实现

pdf-lib 库

pdf-lib 是一个强大的 JavaScript/TypeScript 库,用于 创建、修改和操作 PDF 文档。它完全在 Node.js 和浏览器环境中运行,不依赖任何外部服务或原生依赖(如 PDFtk 或 Ghostscript)。

主要功能

  • ✅ 创建新的 PDF 文档
  • ✅ 修改现有的 PDF(如添加文本、图片、水印)
  • ✅ 合并多个 PDF 文件
  • ✅ 提取 PDF 页面
  • ✅ 添加表单字段(如文本框、复选框)
  • ✅ 支持嵌入字体(包括自定义字体)
  • ✅ 支持加密和权限控制

基本用法

创建一个简单的 PDF 文档

import { PDFDocument, rgb } from 'pdf-lib';async function createPdf() {// 创建一个新的 PDF 文档const pdfDoc = await PDFDocument.create();const page = pdfDoc.addPage([550, 750]); // [width, height]// 添加文本page.drawText('Hello, PDF-Lib!', {x: 50,y: 700,size: 30,color: rgb(0, 0, 0), // 黑色});// 保存 PDFconst pdfBytes = await pdfDoc.save();return pdfBytes; // 可写入文件或发送给客户端
}createPdf().then(pdfBytes => {// Node.js 写入文件const fs = require('fs');fs.writeFileSync('output.pdf', pdfBytes);
});

优缺点

✅ 优点

  • 纯 JavaScript,跨平台(Node.js 和浏览器均可运行)
  • API 直观,文档完善
  • 支持现代 PDF 功能(如嵌入字体、表单)
  • 不需要外部依赖(如 PDFtk、Ghostscript)

❌ 缺点

  • 处理超大 PDF 时可能较慢
  • 不支持 PDF 渲染(仅修改结构,不能像 PDF.js 那样显示 PDF)
  • 某些高级 PDF 功能(如 OCR)不支持

核心代码

安装依赖:

pnpm i pdf-lib
const sharp = require('sharp')
const { statSync, writeFileSync } = require('node:fs')
const { PDFDocument } = require('pdf-lib')/*** 图片转换为PDF* @param {sharp.Sharp} img* @param {String} target*/
const toPdf = async (img, target)=>{const pdf = await PDFDocument.create()const page = pdf.addPage()const pdfImg = await pdf.embedJpg(await img.toBuffer())const { width, height } = pdfImg.scale(1)page.setSize(width, height)page.drawImage(pdfImg, { x:0, y:0, width, height })const pdfBytes = await pdf.save()writeFileSync(target, pdfBytes)
}

效果预览

未来展望

能够合并所选图片到一个 PDF 文档。

http://www.xdnf.cn/news/863821.html

相关文章:

  • 将word文件转为kindle可识别的azw3文件的方法
  • AWS DocumentDB vs MongoDB:数据库的技术抉择
  • 在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
  • Edge Databases:赋能分布式计算环境
  • PPTAGENT:让PPT生成更智能
  • sqli-labs通关_SQL注入_SQL注入靶场
  • 《树数据结构解析:核心概念、类型特性、应用场景及选择策略》
  • 【WPF】WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码)
  • 服务器部署--Flask项目
  • AWS 成本异常检测IAM策略
  • WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤
  • GB/T 24507-2020 浸渍纸层压实木复合地板检测
  • 使用 LangChain 和 RAG 实现《斗破苍穹》文本问答系
  • Canal
  • 电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网
  • 实时通信RTC与传统直播的异同
  • 代码训练LeetCode(22)研究者H指数
  • 神经网络-Day44
  • 最新MySQL数据库主要版本系列差异比较及新增功能详解
  • DeepSeek 赋能智能零售,解锁动态定价新范式
  • SpringAI集成DeepSeek实战
  • 豆包突然没法用了,一打开就提示网络连接错误
  • Android 颜色百分比对照
  • OA工程自动化办公系统 – 免费Java源码
  • android 之 KeyguardService
  • Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)
  • CentOS7搭建Hadoop集群
  • Oracle OCP与MySQL OCP认证如何选?
  • 零基础玩转Python生物信息学:数据分析与算法实现
  • Python Flask中启用AWS Secrets Manager+AWS Parameter Store配置中心