ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Ekko Agent PDF 技能实战指南:基于 pypdf / reportlab 的读取、生成、表单与视觉验证全流程

Ekko Agent PDF 技能实战指南:基于 pypdf / reportlab 的读取、生成、表单与视觉验证全流程 AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载导读本文以 Ekko Agent 内置的pdf技能Skill为骨架系统讲解如何在 AI Agent 工作流中完成 PDF 的文本抽取、表格提取、文档创建、页面合并拆分、AcroForm 表单的创建与填充、水印盖章、元数据与附件管理、AES-256 加密解密以及基于页面栅格化的视觉验证。读完本文你将掌握一套可直接复用的 PDF 处理命令行工具链全部脚本位于 packages/ekko-agent/skills/pdf/scripts并理解其背后的 pypdf、reportlab、pdfplumber、pypdfium2 技术实现与安全准则。1. Skill 定位与能力边界pdf技能是 Ekko Agent 内置技能之一技能目录见 packages/ekko-agent/skills其能力声明frontmatter为读取、创建、合并、拆分、填充、水印、盖章、加密、检查、渲染和视觉验证 PDF 文件并覆盖 AcroForm 表单工作流。元数据关键词为.pdf、pdf form、merge pdf、create pdf方便按文件扩展名与任务类型自动路由。技能声明见 SKILL.md明确该技能适用于PDF 内容提取text / tables / metadata / form fieldsPDF 生成从结构化输入创建新文档页面级操作合并、拆分、旋转、压缩表单操作AcroForm 的检查、填充、创建元数据与文件附件管理加密/解密基于口令视觉审查页面渲染成图片供多模态模型检查。一个关键的设计原则是默认输出到新文件除非用户明确要求绝不覆盖或删除源 PDF对输入先检查再变换并默认保留页面顺序、方向、尺寸、注释和表单意图。2. 环境准备依赖安装与渲染后端技能文档要求先检查依赖且不得静默安装——缺少依赖时应明确告知用户安装命令。常用依赖为python3 -m pip install pypdf reportlab pdfplumber各库职责如下库用途对应脚本pypdf合并/拆分/填充/加密/元数据/附件的 PDF 对象级操作pdf_merge.py、pdf_split.py、pdf_fill_form.py、pdf_secure.py、pdf_meta.pyreportlab从零创建 PDF 文档与 AcroForm 控件platypus / canvas.acroFormpdf_create.py、pdf_make_form.py、pdf_stamp.pypdfplumber文本与表格提取、扫描页启发式判断pdf_read.py2.1 页面渲染后端pypdfium2 → pdftoppm 回退链页面渲染pdf_page_image.py、pdf_form_layout.py --render-overlay依赖统一的栅格化模块 _raster.py其回退链为pypdfium2pip 安装PdfDocument.render(scaledpi/72.0)渲染后转 PIL RGB 图像Poppler 的 pdftoppm系统包poppler-utils以pdftoppm -png -r DPI -f page -l page逐页输出。当两个后端都不可用时脚本不会崩溃而是输出{rendered: false, missing: [...]}的 JSON 并返回退出码 0让调用方可以分支处理而不是中断。缺失提示会给出安装建议[python3 -m pip install pypdfium2, poppler-utils (provides pdftoppm), e.g. apt-get install poppler-utils]3. 运行方式skill_view、baseDirectory 与 terminal_exec技能文档规定使用本技能的第一步是调用skill_view查看本 Skill并从返回结果中取得baseDirectory所有内置辅助脚本都位于baseDirectory/scripts下。执行辅助脚本统一使用terminal_exec工具命令为python3加参数数组必要时先用--help查看精确参数。典型调用示例文档原文保留python3 baseDirectory/scripts/pdf_read.py input.pdf --json python3 baseDirectory/scripts/pdf_page_image.py input.pdf -o rendered --pages 1-3 python3 baseDirectory/scripts/pdf_merge.py first.pdf second.pdf -o merged.pdf python3 baseDirectory/scripts/pdf_split.py input.pdf -o pages注上例中的--json与-o是技能文档的示意写法实际参数以各脚本--help为准例如pdf_read.py使用--text/--tables/--meta/--fields互斥模式pdf_page_image.py使用--out-dir。凡涉及表单操作应先通过skill_view阅读 references/forms.md。所有脚本统一约定输出 UTF-8 JSON 到 stdout脚本内通过sys.stdout.reconfigure(encodingutf-8)保证中文与 Unicode 内容不乱码错误信息走 stderr并以非零退出码表达失败。4. 辅助脚本总览技能文档给出的 12 个辅助脚本按职责分类如下脚本能力依赖pdf_read.py抽取文本、表格、元数据、表单字段pdfplumber、pypdfpdf_page_image.py将选中页渲染为 PNGpypdfium2 / pdftoppmpdf_create.py从结构化 JSON 创建 PDFreportlabpdf_merge.py / pdf_split.py页面合并与拆分pypdfpdf_fill_form.py / pdf_form_layout.py / pdf_make_form.pyAcroForm 检查、填充、创建pypdf、reportlab、PILpdf_watermark.py / pdf_stamp.py页面叠加层pypdf、reportlabpdf_meta.py元数据与附件操作pypdfpdf_secure.py口令加密/解密pypdf每类脚本都配套了无网络依赖的端到端测试见 tests/test_pdf_skill.py可作为用法参考与回归保障。5. 核心工作流5 步标准流程技能文档定义了处理任意 PDF 任务的标准工作流这是整个技能的方法论骨架检查按需检查文本、元数据、页数、页面尺寸、加密状态与表单字段变换执行用户要求的最小变换输出到新文件复读重新读取输出验证页数、文本、元数据、附件或字段值是否与预期一致渲染审查将每个被修改的页面大型生成文档则取代表性样本渲染成图片用view_image检查裁剪框crop box、旋转、裁切、字体渲染、叠加层与表单外观交付返回输出文件的绝对路径并列出验证中存在的限制。OCR 路由原则只有当普通文本提取为空或明显不完整时才使用 OCR。扫描件应转交ocr-and-documents技能处理pdf_read.py --meta的likely_scanned_pages字段正是为这一路由决策提供依据详见第 6 节。6. PDF 读取与检查pdf_read.pypypdf 读取脚本 pdf_read.py 提供四种互斥模式均输出 JSONpython3 pdf_read.py input.pdf --text # 逐页文本 python3 pdf_read.py input.pdf --tables # 表格可写 CSV python3 pdf_read.py input.pdf --meta # 元数据、页面尺寸、加密/扫描标记 python3 pdf_read.py input.pdf --fields # AcroForm 字段与值 python3 pdf_read.py input.pdf --tables --csv-dir ./csvs # 同时把每张表写成 CSV python3 pdf_read.py input.pdf --meta --password pw # 加密文件需口令各模式的输出要点结合源码--text用 pdfplumber 逐页extract_text()返回{page_count: N, pages: [...]}--tables逐页extract_tables()返回{table_count, tables: [{page, index, rows}]}配合--csv-dir会把每张表按pageN_tableN.csv命名落盘--meta返回加密状态encrypted、页数、DocInfo 元数据key 去掉/前缀、每页width/height/rotation并做扫描页启发式判断——某页无文本但有图片时标记为likely_scanned_pages同时提示转交 OCR 技能--fields返回{field_count, fields: {name: {type, value, options}}}字段类型映射常量在源码第 103 行/Tx - text, /Btn - button, /Ch - choice, /Sig - signature对加密文件--meta与--fields模式下口令缺失或错误会分别以退出码 2/3 明确报错--meta对加密文件若未给口令只返回提示 note 而非崩溃。7. 从零创建 PDFpdf_create.pypdf_create.py 基于 reportlab platypus从 UTF-8 JSON 规格生成 PDFpython3 pdf_create.py spec.json -o output.pdf规格示例源码 docstring 中的完整格式{ title: Example Report, author: example-author, page_size: A4, page_numbers: true, elements: [ {type: heading, text: Section 1, level: 1}, {type: paragraph, text: Body text...}, {type: table, rows: [[H1, H2], [a, b]], header: true}, {type: image, path: chart.png, width: 400}, {type: pagebreak} ] }元素类型与实现细节type说明源码要点heading标题level限制在 1–3使用 reportlab 样例样式表Heading{level}paragraph正文段落BodyText样式 6pt 间距table表格header: true默认时首行加浅灰背景与粗体、跨页重复表头repeatRows1统一 0.5pt 灰色网格线、顶部对齐image图片只给width时按原图宽高比自动计算heightimg.imageHeight / img.imageWidth保持比例pagebreak分页PageBreak()page_size默认 A4传入letter时切换为 letterpage_numbers默认true会在每页底部居中绘制Page NHelvetica 9pt。未知元素类型不会中断而是打印Warning: unknown element type ... skipped。输出 JSON{output: path, elements: N}缺少 reportlab 时返回退出码 2 并给出安装提示。端到端测试 test_pdf_skill.py 中report_pdffixture 演示了包含标题、段落、表格、图片、分页符的完整创建用例并验证页数、Page 1页脚、标题元数据、文本与表格抽取结果。8. 页面编排合并与拆分pdf_merge.py / pdf_split.py8.1 合并 pdf_merge.pypython3 pdf_merge.py first.pdf second.pdf -o merged.pdf python3 pdf_merge.py a.pdf b.pdf -o merged.pdf --bookmarks # 每个源文件加一个顶层书签按参数顺序逐页合并--bookmarks时为每个输入文件按其文件名去扩展名添加一个顶层大纲书签add_outline_item任一输入已加密则直接报错并提示先用pdf_secure.py --decrypt解密输出{output, inputs: N, page_count: 总数}。8.2 拆分 pdf_split.pypython3 pdf_split.py input.pdf --pages 1-3,5,9- -o part.pdf # 1-based 页码范围 python3 pdf_split.py input.pdf --pages 2-3 --rotate 90 -o part.pdf python3 pdf_split.py input.pdf --pages 1-2 --compress -o part.pdf页码范围语法为1-3,5,9-1-based、含端点9-表示到末页parse_pages会校验越界并报错退出码 2--rotate必须是 90 的倍数顺时钟旋转作用于被提取页--compress对内容流做 deflate 压缩——源码注释明确这是适度压缩不会重压图片加密输入需--password否则退出码 3。9. 水印与盖章pdf_watermark.py / pdf_stamp.py两个脚本都基于 pypdf 的page.merge_page()实现叠加区别在于脚本能力适用场景pdf_watermark.py把另一个单页 PDF 的第 1 页叠到输入每一页整本文档的机密/DRAFT水印pdf_stamp.py用 reportlab 在内存中构建文字或图片叠加层按坐标盖到选定页在此签名箭头、斜向 DRAFT 横幅、页角标签# 整本覆盖水印--under 表示垫在正文下面 python3 pdf_watermark.py in.pdf --stamp stamp.pdf -o out.pdf python3 pdf_watermark.py in.pdf --stamp stamp.pdf -o out.pdf --under # 指定页盖章文字 python3 pdf_stamp.py in.pdf -o out.pdf --text DRAFT --x 200 --y 400 \ --font-size 60 --rotation 45 --opacity 0.3 --color #cc0000 # 指定页盖章图片签名图 python3 pdf_stamp.py in.pdf -o out.pdf --image sig.png --x 400 --y 60 \ --width 120 --pages 3pdf_stamp.py的关键参数均以 PDF 点为坐标原点在页面左下角--text与--image互斥必选其一文字可用--font默认 Helvetica、--font-size默认 24、--color#RRGGBB--rotation逆时针旋转角度--opacity0.0–1.0依赖 reportlab 的setFillAlpha/setStrokeAlpha老版本会自动忽略--pages支持1-3,5语法默认全部只给图片--width时用 PIL 读原图保持宽高比按页面尺寸缓存叠加层overlay_cache同尺寸页面复用同一 overlay避免重复构建--under将盖章垫到内容之下等价于背景水印。测试覆盖了文字盖章验证仅目标页出现标记、旋转透明盖章因旋转字形会干扰 pdfplumber 断行改用 pypdf 提取验证以及图片盖章通过对比 XObject 图片数量断言仅目标页新增图片。10. 元数据与附件pdf_meta.pypdf_meta.py 提供五种互斥模式python3 pdf_meta.py in.pdf --set-meta -o out.pdf --title New --author me \ --subject Testing --keywords alpha, beta python3 pdf_meta.py in.pdf --clear-meta -o out.pdf # 清除全部 DocInfo 元数据 python3 pdf_meta.py in.pdf --attach payload.txt -o out.pdf # 嵌入文件附件 python3 pdf_meta.py in.pdf --list-attachments # 列出附件名 python3 pdf_meta.py in.pdf --extract-attachments ./dir # 抽出全部附件源码中的两个重要实现事实元数据写入的是经典 DocInfo 字典Title/Author/Subject/Keywords。源码注释明确如果 PDF 中还有 XMP 元数据本脚本不会重写它高级阅读器可能显示不一致——这是文档化限制附件操作走 pypdf 的attachments接口--extract-attachments会自动建目录并用os.path.basename清洗文件名防止路径穿越。写模式--set-meta/--clear-meta/--attach必须有-o否则退出码 4。11. 加密与解密pdf_secure.pypypdf 加密脚本 pdf_secure.py 使用AES-256算法# 加密用户口令 所有者口令都从文件读取避免出现在命令行/日志 python3 pdf_secure.py in.pdf --encrypt -o enc.pdf \ --user-password-file user.txt --owner-password-file owner.txt # 解密用已知口令移除加密 python3 pdf_secure.py enc.pdf --decrypt -o dec.pdf --password-file pw.txt口令传入有两种方式--user-password/--owner-password/--password直传但会暴露在进程参数中与对应的--*-file从 UTF-8 文件读取并去除首尾换行。加密时若未提供 owner 口令默认与 user 口令相同对已加密文件再次加密、对未加密文件执行解密都会报错。技能文档特别强调的安全事实PDF 加密时写入的权限标志禁止打印/复制等只是建议性的advisory——阅读器可能遵守但任何 PDF 库都可以剥离它们真正拦截内容访问的只有 user 口令。因此不要把这些权限标志描述为强访问控制。测试test_encrypt_decrypt_roundtrip验证了加密→--meta报告 encryptedtrue→解密→文本可读的完整回路。12. AcroForm 表单工作流技能核心表单是本文档的技术重心完整规格说明见 references/forms.md。其关键设计是同一份 JSON spec 同时驱动布局校验pdf_form_layout.py与表单构建pdf_make_form.py。12.1 表单规格spec格式坐标单位为PDF 点原点在页面左下角1 pt 1/72 英寸A4 595.27 × 841.89letter 612 × 792。完整示例{ title: Example Intake Form, author: example-author, page_size: A4, page_count: 1, fields: [ {name: surname, type: text, page: 1, label: Surname, label_box: [72, 700, 150, 714], entry_box: [160, 696, 400, 716], value: , tooltip: Family name}, {name: agree, type: checkbox, page: 1, label: I agree, label_box: [72, 660, 150, 674], entry_box: [160, 658, 176, 674], checked: false}, {name: color, type: radio, page: 1, label: Color, label_box: [72, 620, 150, 634], entry_box: [160, 616, 400, 636], options: [red, blue], value: blue}, {name: size, type: dropdown, page: 1, label: Size, label_box: [72, 580, 150, 594], entry_box: [160, 576, 300, 596], options: [small, large], value: small} ] }字段约束page_sizeA4、letter或[width, height]点数数组page_count可选会自动扩展为所有字段的最高页码盒子均为[x0, y0, x1, y1]且要求x0 x1、y0 y1label作为静态文本绘制在label_box附近省略label及label_box即为无标签字段radio选项按钮在entry_box内从左到右布局每选项一个槽位并带小型静态说明文字value按导出名预选dropdown映射为 AcroForm choicecombo字段。12.2 字段类型与填充值格式forms.md 给出了 spec 类型、PDF 内部类型/FT与填充后值的对应表Spec 类型/FTpdf_read.py --fields 报告的类型填充后的值text/Txtext字符串本身checkbox/Btnbutton/Yes或/Offradio/Btnbutton/export如/reddropdown/Chchoice选项字符串用pdf_fill_form.py填充时的取值规则checkbox 接受true/falseradio 值需要带前导斜杠如/reddropdown 值为纯选项字符串。12.3 布局校验pdf_form_layout.py与视觉审查循环pdf_form_layout.py 在构建之前校验 spec逐字段检查盒子必须良构且在页面边界内entry box 最小 8×8 pttext/dropdown 最小高度 12 pt同一页上任意两个 entry box 不得重叠重叠簇中第二个及以后的字段会被标记label 必须位于其 entry box 150 pt 以内且不得与 entry box 重叠。退出码0 全部通过1 至少一个问题JSON 报告逐字段给出problems。源码常量即文档规则本身MIN_W8.0、MIN_H8.0、MIN_TEXT_H12.0、MAX_LABEL_GAP150.0。文档建议先 lint 再构建——改 JSON 里的数字比调试渲染出的 PDF 便宜得多。视觉审查循环重点python3 scripts/pdf_form_layout.py spec.json --render-overlay overlay.png [--pdf built.pdf]红色矩形 entry box标注字段名蓝色矩形 label box不带--pdf时在空白页上绘制叠加层纯 PIL永远可用带--pdf时会把真实页面栅格化垫在底层需要 pypdfium2 或 pdftoppm否则报告rendered: false并给出安装提示用view_image加载 PNG专门询问碰撞、对齐和游离标签等问题。测试中test_form_layout_detects_problems精确验证了越界、重叠、标签过远、过小四类问题的检出且确认重叠簇中第一个字段仍报 cleanby_name[one][ok]——这正对应第二个及以后字段被标记的规则。12.4 表单创建pdf_make_form.pypdf_make_form.py 消费同一份 spec用 reportlab 的canvas.acroForm构建真实 AcroFormpython3 pdf_make_form.py formspec.json -o built_form.pdfpage_count不足时按字段最大页码自动扩展page_count max([page_count, *by_page.keys()])四类字段分别映射到form.textfield、form.checkbox、form.radio、form.choice统一borderWidth0.5, forceBorderTrueradio 的按钮尺寸按min(eh, ew/len(options)*0.5, 16)计算槽位宽ew/len(options)输出 JSON 报告{output, pages, fields: [{name, type, page}]}。12.5 表单填充pdf_fill_form.pypypdf 填充脚本 pdf_fill_form.py 从扁平 JSON 读取字段值python3 pdf_fill_form.py form.pdf --fields-json values.json -o filled.pdf python3 pdf_fill_form.py form.pdf --fields-json values.json -o flat.pdf --flattenvalues.json 形如{surname: Smith, agree: true, color: /red, size: large}。源码实现要点checkbox 布尔值归一化pypdf 无法可靠地把裸True映射到 on-state脚本会读取字段的/_States_取第一个非/Off状态作为 on-state默认回退/Yestrue → on-state、false → /Off字段名不存在时跳过并警告而非失败Warning: fields not found in form, skipped: [...]显式设置NeedAppearances让符合规范的阅读器在缺少外观流时也能重新生成字段外观--flatten把字段标记为只读flags1并尝试合并外观失败时警告output keeps interactive fields并继续输出——源码注释提醒异形 widget 需视觉验证。12.6 radio 组的已知怪癖reportlab pypdfforms.md 记录了三条经过测试证实的坑reportlab 要求每个 radio 组至少两次radio()调用单选项 radio 组会产生损坏字段预选在构建期通过value完成之后用pdf_fill_form.py改选需要斜杠导出名/red部分阅读器在 pypdf 填充后对 reportlab radio 的外观渲染不一致——必须用--fields数据真相 渲染页面图视觉真相双重验证不能只看其一flatten radio 组是最不可靠的展平场景——交付前务必检查输出图片。测试test_make_form_fill_roundtrip验证了构建→填充→复读的完整回路radio 值/red、checkbox 值/Yes、dropdown 值large全部断言通过且test_make_form_lists_all_fields验证 label 文本是绘制在页面上的真实文本extract_text()能读到 Surname/Size而非仅存于控件内。13. 密码与敏感 PDF 的安全准则技能文档给出四条硬性安全规则Agent 执行时必须遵守不要把 PDF 口令写进聊天、日志或命令行参数把用户提供的口令写入带限制权限的临时文件通过--password-file、--user-password-file或--owner-password-file传入操作完成后删除该临时文件PDF 权限标志只是建议性的见第 11 节不得描述为强访问控制未经用户授权不得把敏感 PDF 内容发送到外部服务例如不得擅自把保密文档交给第三方 OCR 或解析 API。14. 渲染与视觉验证pdf_page_image.pypypdf 页面渲染脚本 pdf_page_image.py 是工作流第 4 步渲染审查的支撑工具python3 pdf_page_image.py input.pdf --pages 1-3,5 --dpi 150 --out-dir rendered --prefix page python3 pdf_page_image.py input.pdf --pages 1-2 --out-dir imgs # 默认全页、150 DPI--pages支持1-3,5,9-语法1-based、含端点9-到末页越界页码报错退出码 4输出按{prefix}{页码:03d}.png命名如page001.png无栅格后端时返回{rendered: false, missing: [...]}而不是崩溃典型用途视觉模型验证渲染效果以及把纯图片扫描页导出后转交ocr-and-documents技能测试还验证了 A4 页面 72 DPI 渲染尺寸约 595×842 px。15. 质量保障端到端测试一览tests/test_pdf_skill.py 无需网络用临时目录串联全部脚本构成了本技能的验收清单也适合作为 Agent 自测参考测试验证内容test_create_and_meta / test_extract_text / test_extract_tables创建 2 页报告、页脚页码、标题元数据、文本与表格抽取、CSV 落盘test_form_fill_unicode_roundtrip填充含西里尔字母与引号的 Unicode 文本并复读验证test_merge_split_rotate合并 4 页 书签拆分 2-3 页旋转 90°--meta断言 rotationtest_watermark每页都出现 DRAFT 水印test_encrypt_decrypt_roundtrip加密→encryptedtrue→解密→文本可读test_compress--compress后文本仍完整test_make_form_*表单字段齐全、label 落页、构建后填充复读test_form_layout_valid_spec / test_form_layout_detects_problemslint 通过/四类问题检出、重叠簇首字段不误报test_form_layout_overlay* / test_page_image_export叠加层渲染有/无栅格后端两种分支、页面导出尺寸test_stamp_*文字盖章仅命中目标页、旋转透明、图片盖章仅目标页新增 XObjecttest_meta_set_and_clear / test_attachments_roundtrip元数据设置与清除、附件嵌入/列出/抽取16. 最佳实践与常见坑小结综合 SKILL.md、forms.md 与源码可沉淀如下工程经验先检查、再变换、后验证任何变换前先pdf_read.py摸清页数/加密/字段变换后必须复读 渲染图片双重确认新文件优先默认输出新文件不覆盖源 PDF除非用户明确要求表单先 lint 再 build用pdf_form_layout.py校验盒子的边界、尺寸、重叠与标签配对修改 JSON 比调试渲染结果便宜radio 用斜杠导出名填充/red而非red单选 radio 组是 reportlab 的雷区尽量避免渲染后端按需安装pypdfium2 优先、poppler-utils 兜底缺后端时脚本会优雅降级返回rendered: false据此提示用户而非中断任务口令走文件、用完即删任何口令参数都不要直传命令行OCR 只在文本提取为空时启用且交给ocr-and-documents技能避免在pdf技能内重复造轮子所有输出都是机器可读 JSONstdout 明确的退出码非常适合 Agent 工具链自动解析与分支处理。这套工具链让 Ekko Agent 可以在本地完成从读取一份陌生 PDF到生成并填充一份 AcroForm 表单再到加密交付的完整闭环且全程不依赖外部网络服务符合本地优先local-first的工作区理念。赞分享AI 应用人工智能AI Agent本地部署前端后端工作流自动化【免费下载链接】ekko-studioEkko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.项目地址https://gitcode.com/gh_mirrors/he/ekko-studio点击查看免费下载相关推荐Codewhale PDF 技能指南面向 Agent 的 PDF 读取、处理与验证工作流Codewhale PDF 技能指南面向 Agent 的 PDF 读取、处理与验证工作流 Codewhale 是一个用 Rust 构建的开源终端编码智能体其人工智能AI Agent代码智能体CLI工具调用MCP Clientspypdf 表单字段模型详解基于 pypdf.generic.Field 读取与操作 PDF 交互式表单pypdf 表单字段模型详解基于 pypdf.generic.Field 读取与操作 PDF 交互式表单 pypdf 作为纯 Python 的 PDF 处理库后端FastMCP 技能库 PDF 处理实战基于 pypdf 的文本提取、表单填写与文档合并FastMCP 技能库 PDF 处理实战基于 pypdf 的文本提取、表单填写与文档合并 本文是 FastMCP 技能示例体系中 pdf processing人工智能MCP 服务MCP Clients工具调用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表