一个 AI 代理在渲染单页之前应先向文档询问三件事:它有多少页、每页的尺寸是多少,以及是否需要密码。GroupDocs.Viewer.Mcp 服务器通过一次廉价调用(get_view_info)在本机本地返回前两项信息,密码问题则在提示中解决。随后代理只渲染真正需要的页面:

contract.docx 是什么——有多少页,页面尺寸是多少?

带有配置和故障排除的逐步说明请参见文档:How to check a document’s pages before rendering them

为什么要先检查?

render_page 工具生成的每一页都会以内联 PNG 形式返回给代理,通常几百千字节。若代理为查找一张表格而渲染了 60 页文件,就会为那 59 张不需要的图片付出时间和上下文窗口的代价。检查工具 get_view_info 不会渲染任何内容,只返回一个小的 JSON 对象,从而基于事实而非猜测决定渲染哪些页面。

此模式可在任何客户端复用:Claude Desktop、Claude Code、Cursor、带 GitHub Copilot 的 VS Code 或 Windsurf。它是一种写在提示中的习惯,而不是需要配置的功能。

问题 1:有多少页?

get_view_info 返回 pageCount。这是唯一防止文档出现尖锐边缘的保护:render_page 并不会检查页码是否超出文档范围。请求渲染 12 页文档的第 40 页时,仍会得到一张名为 <name>_page40.png 的图片,实际上并不是第 40 页。

在提示中加入此保护的示例:

报告有多少页?然后显示最后一页。

对于电子表格来说,页数更为重要。引擎会把工作表拆分为页面,页面数量往往远大于工作表本身的外观。先了解页数可以防止代理一次性渲染全部页面。

问题 2:每页的尺寸是多少?

这份 PDF 的页面尺寸是 Letter 还是 A4?

响应会为每页列出 number、width 和 height(单位为点)。612 × 792 为 US Letter;约 595 × 842 为 A4。若文档中有横向页面混在纵向页面中,这些尺寸信息会显示出来,而该页面往往正是用户询问的表格或图纸所在页。

另外两个字段 name 和 visible 会在格式支持时填充,例如工作表名称、隐藏的幻灯片或工作表。否则它们分别为 null 和 true。

问题 3:文件是否需要密码?

get_view_info 没有密码字段,因此文件类型和页数并不能告诉你是否需要密码。受密码保护的文件在每次调用任意工具时都必须提供密码。可以在提示中提前提供:

contract.pdf 的密码在我的消息中。先检查它有多少页,然后显示第 2 页。

如果没有密码,调用会失败,代理可以向你请求密码而不是盲目猜测。调用失败时,get_view_info 会返回以 View-info lookup failed for 开头的文本,后跟异常类型和信息,代理即可读取原因并请求密码或正确的文件名。

可复用的“检查‑再渲染”提示

在渲染下面文件名的任何内容之前,先检查其文件类型、页数和页面尺寸。告诉我你发现了什么,然后仅渲染回答我问题所需的页面。文件:contract.docx。问题:终止条款在哪里?

代理调用 get_view_info,报告文件类型和页数,挑选页面后对每个页面调用 render_page。服务器上的第三个工具是 get_license_status;当你需要知道渲染的页面是否会被加水印时使用它。

示例会话

基于文档响应结构的示例(非实际截图)。

You:   Inspect report.pdf before rendering anything.

Agent: [calls get_view_info on report.pdf]
       report.pdf: Portable Document Format File (.pdf), 2 pages.
       Page 1: 612 x 792 points (US Letter). Page 2: 612 x 792 points.
       Which page would you like me to render?

代理的决策与引擎的行为

步骤 代理 引擎
选择文件 从你的提示中获取文件名 在存储文件夹中解析文件名,若名称不匹配则列出可用文件
检查 决定哪些问题重要 返回文件类型、页数和页面尺寸
选页 将你的问题映射到页码 无
渲染 对每个选定的页面调用 render_page 生成 PNG

真实限制

  • 评估模式。 渲染的页面会带有评估水印,服务器进程最多同时打开 15 份文档。询问 “Viewer 服务器是否已授权?” 以便让代理在依赖输出前调用 get_license_status。
  • 页数不会为你挑选页面。 get_view_info 只告诉存在哪些页面,而不指明哪一页包含答案。为此,你需要渲染目录页或几个候选页。
  • 仅支持 PNG。 render_page 没有格式选项。

FAQ

AI 代理如何获取 PDF 的页数? 如果已连接 Viewer 服务器,Claude 可以调用 get_view_info 并读取 pageCount,无需渲染任何页面。答案来源于文档本身,而非猜测。

文档信息 MCP 工具能告诉代理哪些页面需要渲染吗? 可以。先提供页数和尺寸,然后说明你在寻找什么。它会渲染能够回答问题的页面。

检查文档会把它上传到任何地方吗? 不会。服务器从你配置的文件夹读取文件,并将一个小的 JSON 对象返回给客户端。

深入了解