这个阅读器的用途
它是一个轻量的只读查看器,适合这些场合:公用电脑上没有PDF软件,手机浏览器处理附件不方便,或者发送文件前想快速看一眼内容。 你可以翻页、缩放、复制当前页的文字,并把这些文字朗读出来。它不能做批注、高亮、填写表单、签名、全文搜索或编辑,定位就是“看”。
文件在哪里处理
选中文件后,代码用file.arrayBuffer()读取字节,交给Mozilla的开源库PDF.js(pdfjs-dist,本项目中为6.3.289版)。 解析和绘制由PDF.js负责,它的worker脚本同样运行在你的浏览器里。库本身和worker文件都由本站随页面一同提供,并非从第三方CDN获取。 页面中没有把PDF发往网络的代码,因此不会上传或保存;刷新或关闭标签页后,内存中的文档也随之清除。想验证的话,打开文件时看一下开发者工具的“网络”面板即可。 网站通用的广告、统计脚本独立运行,拿不到你的文档内容。
缩放是怎么算的
初始比例是PDF原始尺寸(1个PDF点对应1个像素)的1.2倍,界面上显示为100%。每点一次放大或缩小,比例变化0.24,范围是0.6倍(50%)到3.6倍(300%)。 下表按竖向A4(595.28 × 841.89点),用同样的常数在网站构建时计算出各档的画布尺寸,以及按每像素4字节估算的所需内存。
| 显示比例 | 内部比例 | A4画布(px) | 内存(MB) |
|---|---|---|---|
| 50% | ×0.60 | 357 × 505 | 0.7 |
| 60% | ×0.72 | 429 × 606 | 1.0 |
| 80% | ×0.96 | 571 × 808 | 1.8 |
| 100% | ×1.20 | 714 × 1010 | 2.8 |
| 120% | ×1.44 | 857 × 1212 | 4.0 |
| 140% | ×1.68 | 1000 × 1414 | 5.4 |
| 160% | ×1.92 | 1143 × 1616 | 7.0 |
| 180% | ×2.16 | 1286 × 1818 | 8.9 |
| 200% | ×2.40 | 1429 × 2021 | 11.0 |
| 220% | ×2.64 | 1572 × 2223 | 13.3 |
| 240% | ×2.88 | 1714 × 2425 | 15.9 |
| 260% | ×3.12 | 1857 × 2627 | 18.6 |
| 280% | ×3.36 | 2000 × 2829 | 21.6 |
| 300% | ×3.60 | 2143 × 3031 | 24.8 |
在100%时,一页A4约绘制为714 × 1010像素;到300%时增大到约2143 × 3031像素(约24.8MB)。手机或较旧的电脑在最大倍率下可能渲染缓慢甚至失败。 阅读器没有针对高分辨率屏幕做额外适配,所以在这类屏幕上100%时文字可能略显柔和,放大一档通常就清晰了。页面放在一个可滚动的框内,放大后的页面通过滚动这个框来移动。
计算示例
- 100%时的画布大小:A4宽595.28点 × 1.2 ≈ 714像素,高841.89点 × 1.2 ≈ 1010像素;按每像素4字节,714 × 1010 × 4 ÷ 1,048,576 ≈ 2.8MB。
- 需要点几次:从1.2倍出发,每次放大加0.24,所以到上限3.6倍需要 (3.6 − 1.2) ÷ 0.24 = 10次。缩小方向是1.2 → 0.96 → 0.72 → 0.6,点3次到达下限50%,最后一步只减了0.12,因为被下限截住。
- 读一整页要多久:速度固定为0.95倍,时长取决于所用语音和文字量,工具不提供预估,请以实际听到的为准。
复制文字与朗读
页面绘制完成后,代码向PDF.js取得该页的文字片段,用空格连接,并把连续空白合并为一个。因此复制出的文字遵循PDF内部存放文字的顺序,不一定等同于屏幕上的阅读顺序。 表格、分栏排版可能会交错,原有的换行也会丢失。中文文档里,片段交界处有时会出现多余的空格,粘贴后请自行整理。 朗读是把同样的文字交给浏览器内置的语音合成,语速固定为0.95倍。声音和语言取决于浏览器与系统自带的语音,工具不会按文档语言来选择,所以默认语音不支持的语言可能读得很别扭。 翻页会中断朗读,点“停止朗读”可立即停止。如果浏览器不支持语音合成,两个朗读按钮会被隐藏。
不适用的情况
- 扫描件:纸质文件扫描后只保存为图片的PDF没有文字数据,无法复制或朗读。这里没有OCR(文字识别)功能。
- 加密PDF:没有输入密码的入口。工具会识别PDF.js返回的密码错误,并提示无法打开。
- 一次只显示一页:没有连续滚动、缩略图、文内搜索和书签跳转。需要在长文档里找词时,更适合用浏览器自带的查看器。
- 批注与表单:不能在表单域中填写、高亮或添加评论。
- 超大文件:代码没有设置大小上限,但整个文件会读入内存,几百MB的PDF或手机上可能变慢甚至卡住。
- 外观的精确度:未嵌入字体或使用高级透明、图形特性的PDF,显示效果可能与专业阅读器略有差异。印刷校对和具有法律意义的文件最终确认,请用专业查看器。
看完之后
只需要其中几页时,可以用PDF合并·拆分按页码范围提取。复制出文字后想知道有多长,可粘贴到字数统计; 要对比两个版本的差异,可以用文本差异对比。
常见问题
我选择的PDF会被保存吗?
不会。它只在浏览器内存中打开,不上传也不保存。刷新页面后文档就消失了。
能打开有密码的PDF吗?
目前不能,因为这里没有输入密码的地方。如果你知道密码,请在其他软件中另存一份去除保护的副本再使用(以你有权这样做为前提)。
为什么有些页面无法朗读或复制文字?
纸质文件扫描后保存为图片的PDF,页面本身是图片,不含文字数据。页面可以显示,但没有可复制或朗读的内容,文字面板会给出提示。
可以一次复制整份文档的文字吗?
不可以,只会复制当前查看的那一页。需要更多内容时,翻到下一页再复制。
没有朗读按钮,或者听不到声音怎么办?
浏览器不支持语音合成时,朗读按钮会被隐藏。即使支持,若设备没有对应语言的语音,或处于静音状态,也可能没有声音。