m4tq 打开下载页后,在「输入密码」框里填这 4 位,再点它下方的按钮即可下载,不用注册、不用登录。
这个工具解决什么问题
「这份 PDF 到底怎么回事」在 Windows 桌面端一直没有轻量入口。阅读器的「文件 → 属性」只显示 /Info 里那六行文字,字体、图像、页面几何、书签、批注、表单、附件、XMP、签名、交叉引用结构全看不到;命令行工具能看,但要装运行环境、记一堆参数、输出是一坨英文纯文本,既不好存档也不好发给同事;在线「PDF 体检」站最省事,但合同、标书、审计底稿、内部教材恰恰是最不该上传的一类文件。更麻烦的是排查结论没法留证据:处理前和处理后到底变了什么,靠两份纯文本手工比对不现实。
- 原来的做法:先装一个命令行工具看两行,再换一个网页站传一次文件,遇到字体问题再去查阅读器的「字体」页,最后凭印象写一句「应该是字体没嵌入」——到底哪几页、哪个字体、有没有 /ToUnicode、图是什么色彩空间,谁也说不全
- 用这个工具:把 PDF 拖进窗口(或一次多选、右键唤起)→ 左边看摘要、右边切页签看页面 / 字体 / 图像 / 书签 / 批注 / 表单 / 附件 / XMP → 「问题」页直接列哪一条、什么级别、影响是什么、站内哪个工具能处理 → 点「导出 JSON」得到一份可存档、可贴给同事的完整报告
- 省下来的:不用上传文件、不用装命令行环境、不用记参数;十类信息一屏切换,问题清单把「读不到」与「没问题」分开写;JSON 字段名是稳定契约,能直接进归档系统或自己的脚本;源文件的字节数、修改时间、哈希在读取前后逐字节不变——这一点有专门的只读验收
能看什么:一份 PDF 的十个面
窗口上半是文件列表:每加一份 PDF 就多一行,显示文件名、大小、页数、PDF 版本、加密状态、xref 结构、字体数、图像数、问题条数。点哪一行,下半部分的摘要与明细就跟着换到哪一份;读过的文档对象随即释放,所以一次加几十份也不会把内存叠起来。点右上角「右键菜单」可以把「信息查看..」装进资源管理器的「百业PDF大师」分组;多选几个 PDF 只会打开一扇窗、追加几行,不是每个文件弹一扇窗。

三份测试样片同时载入:列表里每行都有页数三口径、结构类型与问题计数;左栏是当前选中文件的摘要(版本、页数、大小、读取耗时、生成器、创建/修改时间、标题/作者/主题/关键字/创建工具),右栏「页面」页签按页列出尺寸、旋转、内容流、滤镜、字体与图像。底部两行一句是问题计数,一句是「只读工具:不修改、不写回;源文件字节与修改时间实测不变。不渲染页面、不做预览。」
1. 文件列表与摘要
列表一行给你一眼判断:大小、页数、版本、是否加密、xref 结构、字体/图像数量、问题条数。摘要区再展开:PDF 版本(取文件头 %PDF-x.y,打不开的件也照样能报)、页数三口径(/Count 声明 / 原始递归实测 / 高层枚举)、文件字节数、读取耗时、生成器 /Producer、创建与修改时间(原文 + 解析值,畸形日期写「无法解析」)、/Info 六项标准属性与自定义键数量、XMP 有无与字节长度、/Lang、DisplayDocTitle、trailer /ID 两组十六进制,以及结构特征(经典 xref 表 / 交叉引用流 / 对象流 / 线性化 / 增量更新链)。
2. 页面表
每页一行:页号、MediaBox / CropBox / BleedBox / TrimBox / ArtBox(pt 与 mm 双单位)、旋转、内容流字节数与 /Filter、该页字体、图像、批注数、链接数、表单域数、是否有文本层。文本层不是「有字体就算」——工具会解压内容流数 Tj/TJ/'/" 绘制指令,所以纯扫描件不会被误判成有文字;解压量超过预算的页会如实写「无法判定」。列头可排序,关键字可过滤;万页文件走虚拟表格,不会一次把一万行都画出来。
3. 字体表(全书去重)
字体是「打印缺字」最常见的原因。每行给出 /BaseFont、/Subtype、是否嵌入及嵌入格式(/FontFile / /FontFile2 / /FontFile3)、嵌入流压缩与解压字节、/ToUnicode 有无、/FirstChar–/LastChar–/Widths、/Flags 按位展开、使用它的页号列表。未嵌入的行整行标红并计数;标准 14 字体(Helvetica / Times / Courier 家族)豁免——这批字体阅读器普遍自带,不豁免会把大量正常文件误报成红色。

Type1 走 /FontFile、TrueType 走 /FontFile2、CFF/OpenType 走 /FontFile3;Type0/CID 的描述符要下钻到 /DescendantFonts[0] 才取得到,否则会被误报成「没有描述符」。最后一行 NotEmbeddedFour 是故意做的未嵌入样本,整行红色并计入问题。
4. 图像表
每个图像对象给出宽×高像素、/ColorSpace、/BitsPerComponent、/Filter(含数组滤镜)、有无 /SMask、/Decode、流字节数与解码后字节。色彩空间覆盖 DeviceRGB / DeviceCMYK / DeviceGray / Indexed / Separation / CalRGB / ICCBased / Pattern 等写法;ICCBased 的剖面本身是流,工具会逐层解引用后报出通道数、Alternate 与 Range。图像清单同时报「独立对象数」与「引用次数」:12,000 个图像对象去重后可能只剩 6 个键,只报去重数会把 12,000 次引用说成 6 张图。有效分辨率只在拿得到页面放置矩阵时给真实显示尺寸,否则给「像素 ÷ 页面尺寸」的上限估算,表头与 JSON 字段都标 `basis` / `capped`,不冒充实际 DPI。
5. 书签、批注、表单、附件
- 书签:层级树 + 标题 + 目标页。目标支持
/Dest数组与/A/URI两种;书签走原始/Outlines递归,带环检测与节点预算——成环的坏件会停下并说明,不会把软件挂死 - 批注:按页列
/Subtype、作者/T、正文摘要/Contents、是否有回复线程/IRT。Text、Highlight、Link、FileAttachment、Redact、Ink、Stamp、Screen、Widget 这些子类型都能读;链接批注的 URI 也一并给出。这是「属性清了、名字还漏在批注里」的第二处隐私位 - 表单:字段名、
/FT、标志、当前值/V、默认值/DV、是否只读/必填、是否有/XFA动态表单、NeedAppearances与SigFlags。字段标志缺失时沿/Parent继承,不把「继承来的值」当成 0 - 附件:文件名、描述、字节数(
/Names/EmbeddedFiles)。有/EF项却取不到流的,会进「读取错误」写「字节数未取到」,不报 0 字节冒充正常
6. XMP 与 /Info 的一致性
XMP 是 PDF 里另一份元数据副本,Acrobat 与不少索引系统读的是它。工具列出 XMP 原始流长度、是否为间接对象、命名空间清单,以及 dc:title / dc:creator / dc:description / pdf:Keywords / pdf:Producer / xmp:CreateDate / xmp:ModifyDate / xmpMM:InstanceHistory 条数 / pdfaid:part / pdfaid:conformance 等关键项,并逐项对拍 XMP 与 /Info 是否一致——「属性页干净了、XMP 还留着旧作者」这类问题在这里一眼能查出来。XMP 原文不整段塞进 JSON,需要原文时点「另存XMP原文」单独导出。

这份样片的 XMP 被故意截断:工具照实显示「原始流 236 字节、XML 解析失败」,并给出解析库的异常摘要;同时仍然可以把它另存出来。解析不了就说解析不了,不把失败伪装成「没有 XMP」,也不影响其余页签的读取。
7. 问题清单(30 条规则)
这不是把数据倒出来就完事,而是按 30 条规则逐项判断:级别 / 规则编号 / 对象 / 问题 / 说明与影响 / 处置建议。规则覆盖未嵌入字体、Type3 位图字体、Type0 缺 ToUnicode、CMYK / Separation 图像、近似 dpi 过低或过高、页面尺寸混用、旋转页、空白页、纯扫描件无文本层、缺少标题/作者、XMP 与 /Info 不一致、签名、表单里藏值、批注夹带内容、附件、权限限制、空用户口令、弱加密、交叉引用流、时间戳矛盾、页树 /Count 自相矛盾、悬空引用、缺 /Length、/Metadata 长度不符、图像对象大量重复引用等。
每条规则有三种结果:命中、未命中、无法判定。读不到对应字段的项进「未判」,界面单独计数,绝不当成「没问题」;底部只要有读缺口,就会写「另有 N 处没读到,不等于没问题」,并收掉「已全部判完」那句。这是本工具最容易被别的分析器骗过去的地方——空白不等于通过。

列表把「哪一条、哪一级、对象是谁、为什么、该怎么办」并排放;底栏同时报「另有 6 项进未判,不冒充检查通过」。能指向站内工具的会写明,例如 XMP 与 /Info 不一致指向元数据编辑器;补嵌字体、删批注、OCR 这类本站做不了的,会如实写「本站暂无工具可做」。
8. 加密与权限
是否加密只看 trailer 有没有 /Encrypt;加密算法与密钥长度从 /Filter / /V / /R / /Length 自推,权限七项(打印、复制、修改、批注、填表、装配、高质量打印)逐项报 True/False,并单独提示用户密码是否为空——「加了密但谁都能打开」是常见错觉。需要口令的件可以输入口令重读;AES-256(/V=6)当前读不了,界面只说「本工具读不了(加密算法不支持)」,不会谎报「文件损坏」,并且仍然给文件头版本、大小与 SHA256。

一份 AES-256 系样片:列表状态写「无法判定」、问题列写「没读到,判不了」;左栏仍报 PDF 1.7、文件大小 1,482 字节、读取耗时 10 ms,生成器与属性区写「属性区读不到」,标准属性各写「无此键」;底栏写「另有 1 处没读到,不等于没问题」。这比一个红叉或者一句「文件损坏」更接近事实。
9. 两份对比
「与另一份对比」把当前文件和基线文件摊成差异表:摘要级(页数、版本、尺寸集合、字体集合、图像集合、权限、加密、属性六项、XMP 关键项)+ 逐页几何差异(MediaBox 变动、Rotation 变动)+ 问题条数增减。基线可以是列表里的另一份,也可以从磁盘任选;默认把自己填进基线位,省一次选文件。定位是「处理前 vs 处理后核对到底动了什么」,不做对象级字节 diff,也不声称能证明改动来源。同一份文件跟自己比必须 0 差异——这条写进了自检。
10. JSON 导出与复制
「导出JSON」把当前文件写成一份 UTF-8 带 BOM、缩进 2 空格的 JSON(Windows 记事本与 PowerShell 5.1 打开中文不乱码);文件名默认 <源名>_信息.json,撞到已有文件先确认。多份文件可「导出全部」,每份一个 JSON,还可勾选生成一份汇总 PDF信息汇总_<时间戳>.json(只含文件名、摘要与问题条数)。内容流、图像数据、嵌入字体、XMP 原文一律不内联,只给长度、/Filter 与 SHA256 前 8 位;字符串编码能自动修复的按 UTF-16BE / UTF-8 两条分支重解,修不了的给原文 + encoding:"unknown",绝不假装修复。字段名是对外契约:只加不改不删。「复制JSON」与「复制单行」走剪贴板,排查时可以直接贴给同事。
技术实现
Windows 桌面程序,.NET Framework 4.8 + WinForms 界面,PDF 解析用 PdfSharp 1.50.5147;没有引入 iTextSharp,也不随包带任何原生渲染 dll。它只读:打开文件、遍历对象、把结果装进模型,然后释放文档对象;不调用保存、不写回源文件、不产出 PDF。所有结果都来自对 PDF 原始字典与流的读取——不是靠阅读器截图或文本抽取猜出来的。
- 结构快照抢在高层调用之前。PDF 的页树
/Count可能撒谎、trailer 的startxref可能指到文件外、对象表还会被高层访问悄悄补建。所以工具先按字节层扫描尾部结构,再做高层读取,同一个数只取一次;页数三口径并排(声明 / 原始递归实测 / 高层),不一致就标「部分读到」,不求和、不折中。经典 xref 表、交叉引用流、对象流、线性化、增量更新链都能分辨并报出。 - 书签不碰高层集合。这是本项目最危险的一处:PdfSharp 的高层
PdfOutlineCollection在合法件上会抛类型转换,在悬空件上静默返回 0,在成环件上直接挂死并吃掉数百 MB 内存。工具只走原始/Outlines递归,带已访问对象集合的环检测、节点/层深预算和逐节点 try——成环件会停下并说明,不会带走整个进程。 - 字体与图像逐层解引用。Type0/CID 的
/FontDescriptor与/FontFile*在/DescendantFonts[0],顶层取会全空;/FontFile3的/Subtype挂在嵌入流本身上;ICCBased 的剖面是流,数组元素必须逐层Deref,否则整列读不到。这些都是用探针样本一项项钉住的,不是照文档猜测。 - 「读不到」与「没有」严格分开。悬空引用只认
PdfNull占位;缺/Length的流可能让整本打不开,工具会按字节层停点给「停点像是…」;XMP 解析失败降级为「原文 + 不完整」;表单字段标志缺失沿父节点继承;签名按/V去重后报三态(占位 /ByteRange自洽 / 不符),只对拍ByteRange末字节与文件大小,不验签。 - 读完即释放。读取在后台线程完成,窗口先出来、读取过程不钉住界面;每份文件的文档对象在生成模型后立刻释放,累计表每读一份清零,避免多份文件之间串味。151 MB / 40 页的样本实测:窗口约 5 秒出现,界面读数 2,233 ms 读完,峰值常驻 546 MB;10,000 页 / 1.6 MB 的样本走虚拟表格,只渲染可见行。
- 只读有专门的验收。36 份样本在一轮完整读取后,逐份断言 SHA256、修改时间、字节数一份都没变,测试目录不新增不删除文件。这不是「代码里没写保存」的口头承诺,而是每次都跑的测试。
操作教程
- 第 1 步:把 PDF 放进软件:三种入口:点「选择PDF」用文件对话框选(可多选);把文件从资源管理器直接拖进窗口;或者在资源管理器里对着 PDF 点右键,选「百业PDF大师 → 信息查看..」(第一次用需要在软件里点一下「右键菜单」按钮把它装上)。多选几个文件时只开一扇窗、追加几行,不会每个文件弹一扇窗 预期:文件列表出现一行摘要:大小、页数、版本、加密状态、xref 结构、字体/图像数、问题条数;点中哪一行,下面的摘要与页签就跟着切到哪一份。非 PDF、已移走的文件、读不了的加密件各有中文原因,不会一闪而过,也不会闪退
- 第 2 步:先看摘要,再看页面:左栏从上往下看:版本、页数、文件大小、读取耗时、生成器、创建/修改时间、六项标准属性与自定义键、XMP、
/Lang、标题栏开关、/ID、结构特征。右栏先停在「页面」页签,逐页看尺寸、旋转、内容流、滤镜、该页字体与图像 预期:页面尺寸 pt 与 mm 并排;CropBox 没写会明确写「未写」,不拿 MediaBox 冒充;内容流区分「键不存在」与「0 字节」;有读不到的项目时,底栏写「另有 N 处没读到,不等于没问题」 - 第 3 步:切页签定位问题对象:依次看「字体」「图像」「书签」「批注」「表单」「附件」「XMP」;每张表都支持列头排序与关键字过滤。双击批注或字体行里的页号可以跳回「页面」页签并选中该页 预期:字体表里未嵌入的行整行标红,标准 14 字体豁免;图像表同时报独立对象数与引用次数,近似 dpi 标明是实测还是上限估算;书签成环的坏件会停下并说明;表单值、批注作者与正文、附件名都能看到——这些正是「属性清了、内容里还留着」的几处位置
- 第 4 步:看「问题」页,按级别处理:「问题」页签把 30 条规则的结果摊开:级别、规则编号、对象、问题、说明与影响、处置建议。能指向站内工具的会写具体工具(例如 XMP 不一致 → 元数据编辑器);本站做不了的(补嵌字体、删批注、OCR)会直接写「本站暂无工具可做」 预期:底栏问题计数把「警示」「风险」「提示」分开;读不到对应字段的规则进「未判」,单独计数,不写「已检查、没问题」;万页文件只判预算内的页,其余明确写「未判」,不冒充通过
- 第 5 步:导出 JSON、复制,或者和另一份对比:「导出JSON」把当前文件写成
<源名>_信息.json;「导出全部JSON」给列表里每份文件各写一份,并可另存一份汇总;「复制JSON」与「复制单行」走剪贴板;「与另一份对比」选列表里的另一份或磁盘上的基线文件,看摘要、逐页几何与问题条数差异 预期:导出文件是 UTF-8 带 BOM、缩进 2 空格,中文在记事本里正常显示;大流只给长度、滤镜与哈希前 8 位,不会把 PDF 撑成几十兆;同一份文件跟自己对比必须 0 差异;输出到已存在文件会先确认,永远不会写到源 PDF 上

三份样片同时载入;上半是文件列表,下半左侧是当前文件摘要、右侧是页面明细。注意页数一栏是「声明 / 实际 / 高层」三口径,不一致时会写「部分读到」,而不是拿一个数字硬撑

Type0 的字形描述符在后代字体里、FontFile3 的 Subtype 在嵌入流上,这两处不逐层解引用就会误报「没有嵌入」。最后一条是故意做的未嵌入样本,红色行 + 计数,并在问题清单里指向「源软件重导出」

每一行都能说清「为什么算问题、会影响什么、下一步去哪」;底栏「另有 6 项进未判」是刻意保留的灰区,不是漏报

XMP 解析失败也照样给原文另存入口;成功解析时列命名空间与关键项,并逐项对拍 /Info,把「两份元数据不一致」明写在表里
第一次用想开右键菜单,点工具栏「右键菜单」按钮即可装上,再点一次选移除就清干净,且不影响同系列其它工具;移动了软件所在的文件夹后,在新位置再点一次按钮刷新路径。同系列还有 PDF合并大师、PDF拆分器、PDF旋转工具、PDF删页工具、PDF提取页面、PDF页面重排、PDF裁剪工具、PDF页面缩放、PDF多页拼版、PDF水印专家、PDF页码页眉页脚 和 PDF元数据编辑器,共用同一个右键菜单分组。如果看完报告要动手修:没嵌入字体请回源软件重新导出(本站没有补嵌字体的工具);属性缺失或不一致用元数据编辑器;页面顺序、角度、尺寸问题用对应的页面工具;批注与正文里的隐私本工具只能指出来,处置需要回到原编辑软件或专业的涂黑工具。
常见问题
/V=6 的 AES-256 加密,所以本工具读不了这类文件。界面只写「本工具读不了(加密算法不支持)」,不会说文件损坏,并且仍然报出文件头版本、文件大小、SHA256 与字节层结构扫描的结果。如果你需要处理 AES-256 的件,请先用能打开它的软件另存为低版本加密或无加密,再来体检。带口令但算法受支持的件可以输入口令重读;口令错会明确提示并给重试机会。/Count 的声明值、按 /Type/Pages 递归数出来的实测叶子数、以及解析库高层枚举的结果。三者可能不一致:有的文件声明 6 页实际只有 3 页,有的 /Count 是负数或 99999999,有的页树被改坏后高层只能读到一部分。本工具三个数并排报,不求和、不折中;不一致就写「部分读到」,并把矛盾记进问题清单。这比强行显示一个数字更接近事实——页数错了,删页、拆分、拼版类工具都会跟着算错。pdfaid:part=1 只是文件自带的声明,不等于通过 veraPDF 那类完整验证。/Helvetica,不豁免会把它们全部误报成问题。补嵌字体必须回到导出源软件重新导出并勾选「嵌入所有字体」,本站目前没有工具能补嵌。/V 去重后有几个签名、ByteRange 的末字节与文件大小是否对得上。对不上只能说明「签名之后文件被改动过或结构不一致」,不能证明是谁改的、也不能证明签名本身有效。真正的验签需要证书链与签名算法校验,请在 Adobe Acrobat 或你们单位的验签系统里做。另外,任何对文件的结构性修改(包括本站其它工具另存的新文件)都会让原签名失效,这是 PDF 签名的规则,不是工具在破坏签名。/Filter 与 SHA256 前 8 位。这组信息足够判断「改前改后是不是同一张图、同一段流」,又不会让一份 151 MB 的 PDF 导出成几十兆的 JSON。XMP 要看原文,用界面上的「另存XMP原文」单独导出;图像和字体要取出原始数据,请用专门的提取工具。JSON 的字段名是对外契约,后续版本只加不改不删,方便你的脚本长期读取。/Info、XMP、/Lang、标题栏开关),产出新 PDF。信息查看器是读:把全书结构摊开、列问题、导出 JSON,一个字节都不改。两者是流水线上的前后两步:先用信息查看器体检,确认问题在哪(属性缺失、XMP 不一致、字体未嵌入、有签名……),能修的再用对应工具修;修完可以再体检一次,用「与另一份对比」核对到底动了什么。如果问题清单指向的是正文里的隐私(批注、表单值、附件名),这两个工具都处置不了,报告里会如实写「本站暂无工具可做」。软件截图

上半是文件列表(大小 / 页数 / 版本 / 加密 / 结构 / 字体 / 图像 / 问题),下半左侧摘要、右侧「页面」页签;底栏常驻只读声明与问题计数

Type1 / TrueType / CFF 的嵌入格式分列,未嵌入行整行标红;ToUnicode、字符范围、Widths 一并给出

30 条规则逐项判断,读不到的进「未判」;能指向站内工具的写明工具名

XMP 截断件:原始流长度照报、解析失败照写,同时仍可另存原文;成功解析时会逐项对拍 /Info

AES-256 系样片:不谎报损坏,给文件头版本、大小、读取耗时与结构判定;属性区读不到就写「属性区读不到」

界面读数 2,233 ms 读完(打开 178 ms、遍历 783 ms,其余为摘要计算),底栏同时报「另有 32 处没读到、32 项未判」,不把预算外的页算成通过
技术实现与后续维护
程序集 by.pdf.infoviewer,单文件发布:PdfSharp、界面库、授权组件与 JSON 组件都已合并/嵌入进 exe,包里再带一份空的 cfg.ini(首次启动由框架自己写运行状态),没有原生依赖,也不带任何渲染用的 dll。运行环境是 .NET Framework 4.8,Windows 10/11 一般已经具备。授权与试用计时按机器码在本机完成,不联网、不上传文件内容。
出厂前开发版与混淆发布版各跑了一套同样的五层验收,每版 1,721 条断言、0 失败:无界面自检 1,425 条(六种 PDF 值类型 × 读取/缺失/畸形矩阵、间接对象穿透、页树三口径、xref 五类结构、30 条问题规则三态、JSON 导出契约、XMP↔/Info 对比、diff 幂等、灰 ≠ 绿、只读声明与界面控件结构);界面端到端 186 条(十个页签、过滤/排序、复制与导出双向解析、另存 XMP 原文、同文件对比、二次确认、加密件错/对口令、18 份边界件、非 PDF 拒收、32 份一次载入、只读证明);151 MB 大文件与万页件 34 条;真实资源管理器多选 18 条;发布素材实拍 58 条。发布版在只放 exe + 空 cfg.ini 的干净目录里重跑了自检、端到端、大文件与右键菜单,证明没有旁加载 dll 也完整可用。
混淆采用 SmartAssembly 8:545 个类型里名字仍可读的只剩 5 个(2 个注入属性、Properties.Settings 与两个枚举,属工具链的设计行为),13 个清单资源名全部变成 GUID,入口点已抹平,sn -vf 验签有效,ildasm 打开会回「受保护的模块 -- 无法进行反汇编」。本文所有截图与封面都是用混淆后的发布版实拍,发布包内的 exe SHA256 与混淆产物逐字节一致。
后续可扩展的方向:把问题清单按你们归档规范增删规则并导出处理记录、把 JSON 直接对接归档/检索系统的入库字段、按目录批量体检并生成汇总报表、把「与另一份对比」扩成处理前/后的固定核对模板、给常用字段做白名单与阈值配置、以及在只读边界内增加更多结构探针(例如更细的对象流统计)。这些都能挂在现有「载入 → 模型 → 明细 → 问题 → JSON」的结构上,不需要改界面骨架。
已知的边界(不藏着)
本工具只读,不修文件、不补嵌字体、不删批注、不做 OCR、不校验 PDF/A、不脱敏、不比较对象级字节差异;不渲染页面,所以没有预览图。AES-256(/V=6)读不了,只说「本工具读不了」而不说文件损坏;页数三个口径不一致时显示「部分读到」,不强行给一个数;近似 dpi 只有在拿得到页面放置矩阵时才是实测值,否则是「像素 ÷ 页面尺寸」的上限估算,字段与表头都标了 basis / capped;JSON 不内联内容流、图像数据、字体文件与 XMP 原文;签名只做 ByteRange 结构对拍,不验签,「不符」只能作为线索、不能当作篡改证明;XMP 解析失败会降级为「原文 + 不完整」,不会因此把整份文件判成坏件;损坏文件有可能打不开,那时按字节层给报告,不保证能读出全部结构;万页文件的问题清单只判预算内的页,其余明确写「未判」;标准 14 字体不标红是刻意的豁免,不是漏检;本系列定宽窗体在 200% 缩放的小屏上底部可能落到屏幕外,100% 缩放按设计尺寸打开。这些边界在界面提示、问题清单与本文里用的是同一套措辞。
可以定制(二次开发)
这个工具按「一个痛点一个小工具」的思路做,界面和判断规则都可以按你的实际流程改:比如把问题清单换成你们归档规范的必检项、给字段阈值做配置(dpi 下限、图像字节上限、允许的页面尺寸集合)、按目录批量体检并输出固定格式的报表、把 JSON 直接映射到你们检索系统的字段、把「与另一份对比」做成处理前后的固定核对单、或者在报告里增加你们自己的编号与审核栏。也能和同系列的合并/拆分/旋转/删页/裁剪/水印/元数据工具串成一条流水:体检放在最前、元数据收口放在最后,中间按报告指出的问题逐项处理。需要改动的联系方式见站内「联系我们」页面的 QQ 客服,也可以在本文下方留言说明场景。定制合作会连同可编译的工程一起交付。
使用说明与免责声明
请只对你拥有合法权利、且有权查看其内部结构的文件使用本工具。报告里的「问题」是基于 PDF 结构的技术提示,不是法律、合规或取证结论:签名「不符」只能说明 ByteRange 与文件大小对不上,不能证明谁改过;XMP 声明了 PDF/A 不等于通过 PDF/A 验证;「没有命中规则」也不等于文件合规。工具不修改源文件,但导出的 JSON 会包含元数据、字体/图像清单、批注作者与表单值等可能敏感的信息,请自行决定保存位置与分享范围。对因使用本工具作出的判断或造成的损失,作者不承担责任。本工具按「现状」免费提供。
m4tq 打开下载页后,在「输入密码」框里填这 4 位,再点它下方的按钮即可下载,不用注册、不用登录。
