5个方法读写PDF元数据:用LibPDF快速设置标题、作者与关键词

发布时间:2026/10/11 20:03:34

5个方法读写PDF元数据:用LibPDF快速设置标题、作者与关键词 【免费下载链接】coreA modern PDF library for TypeScript. Parse, modify, and generate PDFs with a clean, intuitive API.项目地址https://gitcode.com/gh_mirrors/core587/core点击查看免费下载LibPDFnpm 包名libpdf/core是一款面向 TypeScript 的现代 PDF 库把读写 PDF 元数据这件小事做到了极致简单几行代码就能设置 PDF 标题、作者、关键词、主题还能让标题直接显示在阅读器窗口标题栏里。无论你是在生成报表、管理文档库还是批量处理 PDF 属性这篇指南都将带你从零上手5 个实用方法几分钟即可跑通。30秒安装并导入 LibPDF 先在项目中安装npm install libpdf/coreLibPDF 同时支持 Node.js 20、Bun 和现代浏览器。安装后即可导入核心类PDF所有元数据方法都挂载在它上面。 元数据的实现位于 src/api/pdf.ts完整字段定义见DocumentMetadata接口src/api/pdf.ts。方法一用 getMetadata() 一次性读取全部元数据拿到一个已有 PDF最快的方式是用批量 getter 把 10 个元数据字段一次取回import { PDF } from libpdf/core; const pdf await PDF.load(fileBytes); // 一次性读取全部元数据 const meta pdf.getMetadata(); console.log(meta.title); // 标题 console.log(meta.author); // 作者 console.log(meta.keywords); // 关键词数组返回的是一个DocumentMetadata对象未设置的字段为undefined因此可以安全地用?? (未设置)做空值兜底。 完整示例examples/06-metadata/read-metadata.ts方法二用 setMetadata() 批量写入多个字段反过来写入也可以一次完成——把多个字段打包成一个对象传入pdf.setMetadata({ title: 2024 年度财务报告, author: Jane Smith, subject: 公司财务概览, keywords: [财务, 年报, 2024], creationDate: new Date(), }); const bytes await pdf.save();setMetadata()还支持局部更新只传需要修改的字段即可其余字段保持原值不变非常适合只改标题、不动其他属性的场景。 完整示例examples/06-metadata/bulk-metadata.ts方法三用 setTitle() 设置标题并显示在窗口标题栏设置标题只需一行pdf.setTitle(Quarterly Financial Report Q4 2024);但有一个很多人不知道的进阶技巧默认情况下阅读器窗口标题栏显示的是文件名。加上showInWindowTitleBar选项后标题栏会直接显示你的文档标题对应 PDF 规范的DisplayDocTitle属性pdf.setTitle(Quarterly Financial Report Q4 2024, { showInWindowTitleBar: true, });在 Adobe Acrobat、macOS 预览等主流阅读器中用户打开文档时第一眼看到的就是正式标题而不是report-final-v3.pdf这类文件名体验立刻专业起来。 完整示例examples/06-metadata/display-title-in-viewer.ts方法四用 setAuthor() 和 setSubject() 设置作者与主题作者和主题是两个最常用的身份信息字段各有独立的读写方法pdf.setAuthor(Jane Smith); pdf.setSubject(公司 2024 财年财务概览与业绩分析); // 读取 console.log(pdf.getAuthor()); // Jane Smith console.log(pdf.getSubject()); // 公司 2024 财年财务概览与业绩分析作者通常写人名或团队名如研发部文档组主题则是对文档内容的一句话描述。这两个字段会显示在大多数阅读器的文档属性面板中是文档检索的重要线索。 完整示例examples/06-metadata/set-metadata.ts方法五用 setKeywords() 管理关键词LibPDF 把关键词 API 设计成了数组形式读起来更自然// 写入一组关键词 pdf.setKeywords([PDF, TypeScript, 文档管理, 自动化]); // 读回 const words pdf.getKeywords(); // [PDF, TypeScript, 文档管理, 自动化]需要增删关键词时读出来改一改再写回去即可const current pdf.getKeywords() ?? []; pdf.setKeywords([...current, 归档]);⚙️ 技术细节PDF 规范中关键词实际存储为单个空格分隔的字符串LibPDF 会在内部自动完成字符串与数组的双向转换你不需要手动拼接。 完整示例examples/06-metadata/keywords.ts加餐日期、语言与其他元数据字段除了标题、作者、关键词setMetadata()还支持以下常用字段一张表看懂字段方法说明创建日期setCreationDate(new Date())文档创建时间支持时区修改日期setModificationDate(new Date())最后修改时间文档语言setLanguage(zh-CN)RFC 3066 语言标签提升无障碍与语音朗读体验生成器setProducer(MyApp v2)生成 PDF 的工具/库名称创建者setCreator(Report Generator)创建内容的应用名称陷印状态setTrapped(False)印刷术语取值为True/False/Unknown其中文档语言容易被忽略却很有价值屏幕阅读器和语音合成工具会依据它选择正确的发音en-US、de-DE、ja、zh-CN等都是常见写法。 相关示例examples/06-metadata/document-dates.ts、examples/06-metadata/document-language.ts快速上手清单 ✅只读不改→getMetadata()一把梭getMetadata() 源码批量写入→setMetadata({ ... })一次传完setMetadata() 源码要好看→setTitle(title, { showInWindowTitleBar: true })setTitle() 源码要署名→setAuthor()setSubject()补齐身份要可搜→setKeywords([...])让文档可被检索所有元数据在pdf.save()后都会持久化重新加载文档也不会丢失。总结用 LibPDF 读写 PDF 元数据核心就记 5 个方法getMetadata()全量读取、setMetadata()批量写入、setTitle()设置标题支持显示在窗口标题栏、setAuthor()/setSubject()补齐作者与主题、setKeywords()管理关键词。配合 API 文档 和 examples/06-metadata/ 目录下的 8 个官方示例你已可以处理绝大多数文档属性场景。赞分享【免费下载链接】coreA modern PDF library for TypeScript. Parse, modify, and generate PDFs with a clean, intuitive API.项目地址https://gitcode.com/gh_mirrors/core587/core点击查看免费下载相关推荐PDF元数据设置使用wkhtmltopdf添加标题、作者与关键词PDF元数据设置使用wkhtmltopdf添加标题、作者与关键词 你是否曾遇到生成的PDF文件缺乏基本信息如标题、作者导致文档管理混乱的问题本文将详细介CLIStirling-PDF元数据编辑教程修改PDF作者/标题/关键词技巧Stirling PDF元数据编辑教程修改PDF作者/标题/关键词技巧 你还在为PDF文件的作者信息错误、标题不规范或关键词缺失而烦恼吗本文将详细介绍如何使后端前端桌面应用GoFakeS3完全指南如何快速搭建本地AWS S3测试环境GoFakeS3完全指南如何快速搭建本地AWS S3测试环境 GoFakeS3是一个简单的AWS S3对象存储模拟工具专为本地测试AWS S3 API而设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/11 19:58:34

银行排队系统实验报告核心指南:M/M/c建模与仿真验证

简介:银行排队系统实验报告是一份面向计算机专业学生的C语言数据结构课程设计资料,以队列为核心模拟银行多窗口排队场景,帮助学习者掌握如何将离散事件仿真转化为可运行的程序,并理解平均逗留时间的计算逻辑。资源为单个doc文档&a…

2026/10/11 19:58:34

固定频率灵巧噪声移频干扰:MATLAB仿真与脉压验证

简介:这份资源面向信号处理与电子对抗方向的学习者与研究人员,提供基于固定频率灵巧噪声仪的移频干扰MATLAB实现方案,适合具备一定MATLAB基础、希望理解噪声源频率偏移与干扰叠加原理的中高级读者。压缩包共3个文件,包含1个m脚本、…

2026/10/11 23:14:17

证书制作全流程指南:从纸张选型到防伪与数字验真的完整方案

做证书这件事,看着简单,真正做起来却是一整套系统工程。我第一次系统性接触证书制作,是在一家职业培训机构的行政岗,一年要发几百份结业证书和技能等级证明。当时我的想法很幼稚——不就是排个版、打出来盖个章么?结果…

2026/10/11 23:14:17

智能血液养护舱:非侵入式循环养护的原理与体验

前阵子,一位老同事拿着体检报告来找我,说甘油三酯偏高、整天犯困,在网上看了些“血液净化”的视频,心动了。我赶紧拦住了他:那些“洗血”项目大多属于侵入式操作,得穿刺、得用抗凝药物,必须在严…

2026/10/11 23:14:17

自研轻量级表达式引擎:从词法分析到权限控制落地

如果你所在的项目组也经历过这样的需求:按钮的显示条件不在代码里,而在运营后端的动态配置里;订单的折扣规则不写在 if-else 里,而是随时可能被产品经理调整——那你应该会对这篇分享有共鸣。我们组前段时间负责一个跨平台后台系统…

2026/10/11 23:14:17

从零搭建团队技能库:能力图谱设计与实操指南

1. 从“skills”这个词说起:它到底指什么“skills”这个词看起来简单,但在实际项目语境里,它承载的东西远比字面意思复杂。我最早接触这个词是在做团队能力盘点的时候,当时有人提议做一个“技能库”,把所有成员会的技术…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑