marker-pdf的工具类MarkerPDF职责;IO 流踩坑;
1.marker-pdf的工具类MarkerPDF职责
目前我的MarkerPDF职责为用户意图 + 规则约束
| 层级 | 职责 |
|---|---|
MarkerPDF |
用户意图 + 规则约束 |
extract_pdf |
I/O + 调度 |
| server / provider | 底层执行(不信任输入) |
👉之前在MarkerPDF是写死了pdf的读取页数,导致一旦页数超出了可读的pdf范围,就会报错。
MarkerPDF的职责就是用户意图 + 规则约束,所以页数验证也应该为MarkerPDF的方法。
在工具类中添加validate_page_range方法。在拼装config之前进行调用。
2.IO流踩坑
核心原则(记住这句)
“任何一个 IO 流,只要被读过一次,在再次使用前必须 seek(0)。”
你用 同一个 pdf_io: BytesIO
先给了:
PdfReader(pdf_io)
再原样传给:
requests.post(files={"file": pdf_io})
结果:
👉流指针位置不可控(requests 直接从当前 cursor 位置开始传)
👉服务端拿到的不是完整 PDF(服务端收到的 PDF 不是 %PDF- 开头)
👉pdfium 极其严格 → 直接抛 Data format error
👉每个库用自己的 BytesIO(bytes)
浙公网安备 33010602011771号