AI prompts
base on PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 # PDF 补丁丁(PDFPatcher)
感谢您关注 PDF 补丁丁,请在使用软件或源代码前阅读本说明和授权协议。本软件及源代码采用 AGPL+“**良心授权**”协议——**用户每次使用本软件后如有所获益,应行一善事;如使用源代码开发了新的软件并获得收益,应将收益中不低于千分之一的金额捐赠给社会的弱势群体**。
## 功能简介
PDF 补丁丁是一个 PDF 处理工具。它具有以下功能:
- 修改 PDF 文档:修改文档属性、页码编号、页面链接;统一页面尺寸;删除自动打开网页等动作;去除复制及打印限制;设置阅读器初始模式;清理文档隐藏垃圾数据;重新压缩黑白图片;旋转页面。
- 贴心 PDF 书签编辑器:带有阅读界面(具有便于阅读竖排文档的从右到左阅读方式),可批量修改 PDF 书签属性(颜色、样式、目标页码、缩放比例等),书签可精确定位到页面中间;在书签中执行查找替换(支持正则表达式及 XPath 匹配、可快速选择篇、章、节书签),[自动快速生成文档书签](https://www.cnblogs.com/pdfpatcher/p/8452025.html)。
- 制作 PDF 文件:合并已有 PDF 文件或图片,生成新的 PDF 文件;合并后的 PDF 文档带有原文档的书签,还可挂上新书签(或根据文件名生成),新书签文本和样式可自定义;合并的 PDF 文档可指定统一的页面尺寸,以便打印和阅读。
- 拆分或合并 PDF 文件,并保留原文件的书签或挂上新的书签。
- 高速无损导出 PDF 文档的图片。
- 将 PDF 页面转换为图片。
- 提取或删除 PDF 文档中指定的页面,调整 PDF 文档的页面顺序。
- 根据 PDF 文档元数据重命名 PDF 文件名。
- 调用微软 Office 的图像识别引擎分析 PDF 文档图片中的文字;将图片 PDF 的目录页转换为 PDF 书签。识别结果可写入 PDF 文件。
- 替换字体:替换文档中使用的字体;嵌入字库到 PDF 文档,消除复制文本时的乱码,使之可在没有字库的设备(如 Kindle 等电子书阅读器)上阅读。
- 分析文档结构:以树视图显示 PDF 文档结构,可编辑修改 PDF 文档节点,或将 PDF 文档导出成 XML 文件,供 PDF 爱好者分析、调试之用。
- 永久免费,绝不过期,无广告,无弹出废话对话框,不窥探隐私。
## 授权协议
《PDF 补丁丁》软件(以下简称本软件)受著作权法及国际条约条款和其它知识产权法及条约的保护。
本软件对于最终用户免费。由于本软件使用了带有 AGPL 条款的第三方开源组件,因此,本软件及其源代码的使用协议也基于 AGPL。另外还带有如下附加条件。在遵守本软件的前提条件下,你可以在遵循本协议的基础上自由的使用和传播它,你一旦安装、复制或使用本软件,则表示您已经同意本协议条款。如果你不同意本协议,请不要安装使用本软件,也不应利用其源代码。
附加条件:
每一个使用本软件的用户,如果本软件帮助了您,每使用本软件后,您应当做 1 件善事。善事无分大小,有心则行。例如:
1. 如果您的父母在身边,你可以为您的父母做一顿美味的饭菜,或者为他们按摩、洗脚;如果他们身处远方,你可以向他们发起通话,问候他们的健康和生活。
2. 在大雨滂沱的时候,如果您有雨伞,可与同路的人共享;在烈日当空的时节,如果您看到环卫工人太阳下工作,您可以为他们买一瓶水送给他们;在拥挤的公共交通工具上,或在公共场合排队等候之际,如果您有座位,可以让给老人、孕妇或提着重物的人就坐。
3. 您可以用您擅长的技能,为身边的人排难解困;您可以将您的知识,分享给其他人,让他们有所获益;您可以向比您困难的人捐资赠物。
4. 如果您觉得这个软件真的好用,请将它的使用方法介绍给别人,让别人也通过使用本软件而得到好处;或者将其它您觉得好用的软件介绍给别人。
如果您无法做到使用本软件后做 1 件善事,请记在心中。在有机会的时候,多行善积德。本用户协议之遵循与否,全在于您的良心。是为“**良心授权**”。
相关定义:
1. 软件:软件是指《PDF 补丁丁》软件以及它的更新、产品手册,以及在线文档等相关载体。
2. 限制:你可以使用本软件的源代码开发应用程序(自由、共享或商用),也可以任意方式分发数量不限的本软件的完整拷贝,但前提是:
① 你分发软件时必须提供本软件的完整版本,未经许可不得对软件乃至它的安装程序做任何修改;
② 你分发软件时不能更改本授权协议;
③ 你如果在商业性宣传活动、产品中附加本软件,应当获得著作权人的书面许可;
④ 你如果利用本软件的源代码编写了其它软件,并且产生了销售收入,应当将该软件销售收入不低于千分之一的金额捐献给社会上的弱势群体。
3. 支持:软件会由于用户的需求而不断更新,著作权人将提供包括用户手册、电子邮件等各种相关信息支持,但软件不确保支持内容和功能不发生变更。
4. 终止:当你不同意或者违背本协议的时候,协议将自动终止,你必须立即删除本软件产品。
5. 版权:本软件及源代码受著作权法及国际条约条款和其它知识产权法及条约的保护。
6. 免责:对于本软件安装、复制、使用中导致的任何损失,本软件及著作权人不负责任。
## 常用的 PDF 开源组件简介
PDF 文档的规范(ISO 32000-1:2008 《Document management — Portable document format — Part 1:PDF 1.7》)可从网上找到,一般来说,它是 PDF 处理程序开发者的必读文献。
PDF 文档格式中涉及印刷领域的多项技术,并有其独特的文档结构,还使用了多种数据压缩算法。要从零开始编写 PDF 文档的处理程序,对于一般人而言,通常是困难而不太现实的。PDF 补丁丁使用 .NET Framework 开发,主要采用 iText 和 MuPDF 这两个开放源代码的组件库来处理 PDF 文档。
前者是 .NET 组件,与 PDF 主程序具有较好的互操作性,并且在解析、生成和修改 PDF 文档,以及嵌入 TTF 字体子集这些功能上,优胜于后者。
后者采用 C 语言开发并编译,与前者相比,其最大的优点是具有渲染 PDF 文档为位图的功能。MuPDF 编译出来的动态组件库可在作者另一个开放源代码库 [SharpMuPDF](https://github.com/wmjordan/SharpMuPDF) 下载。PDF 补丁丁通过 P/Invoke 技术调用该组件库的功能。
除了 PDF 开源组件之外,程序还使用了其它优秀开源组件。例如 ObjectListView 这个强大的列表控件、FreeImage 来读取和解码各种类型的点阵图像文件、Cyotek 的 ImageBox 用于显示渲染好的 PDF 文档页面、TabControlExtra 用于构建选项卡式文档界面、HTMLRenderer 用于显示 HTML 网页界面等等。
## 源代码的结构
- App 目录:PDF 补丁丁主程序
- Common:一些常用的工具类
- Functions:用于呈现软件各类功能的窗体和控件
- Lib:程序使用的第三方组件
- Model:编辑文档时所用的高级模型(基础数据模型由 iText 和 MuPDF 的类实现)
- Options:程序的选项
- Processor:处理 PDF 文档的算法(其中 Mupdf 目录里放置了 P/Invoke 调用 MuPDF 的类)
- doc 目录:放置程序的使用文档
- JBig2 目录:放置 JBIG2 图像的编码和解码库代码
## 运行环境
- Windows 7 以上版本的操作系统。
- .NET Framework 4.0 到 4.8 版本。
- 使用文字识别功能需要安装 Microsoft Office 2003(或 2007)的 Document Imaging 组件(MODI)。
- 编译程序源代码,建议使用 Visual Studio 2019 或更新版本,并安装“.NET 桌面开发”(用于编译 PDF 补丁丁源代码)和“C++ 桌面开发”(用于编译 JBIG2 编码组件)两个工作负载。如使用 Visual Studio 2022,可能会遇到项目“面向不再受支持的 .NET Framework”、需要“将目标更新为 .NET Framework 4.8”的问题。简单方法是将目标更新为 .NET Framework 4.8,如不更新目标,请参考[这篇文章介绍的方法](https://www.cnblogs.com/Stay627/p/15549958.html)。
## 联系作者
除第三方组件外,本软件的源代码完全开放:
<https://github.com/wmjordan/PDFPatcher>
<https://gitee.com/wmjordan/pdfpatcher>
建议通过开放源代码网站通过提交 issue 的方式提交您的建议或需求。因日常工作繁忙,暂不提供加 QQ 或微信咨询的服务,敬请谅解。
在邮件或消息中,请注明你的版本号,附上截图和附件,详细说明你遇到的问题。
如遇到需要提供附件的情况,请把它搞小一点。一般情况下,最好不要发送超过 10M 的附件。
- 对于 PDF 文件,可用“提取页面”功能提取有代表性的页面。
- 对于图片文件,请压缩源文件,或提供有代表性的一两页图片。
", Assign "at most 3 tags" to the expected json: {"id":"10912","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"