# -*- coding: utf-8 -*- """提取电机 PDF 数据手册的文字内容,输出到 motor_pdf_dump.txt""" import sys, io, os try: sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") except Exception: pass SRC = r"C:\Users\ruigu\Downloads\DS-LE-INTEGRATED-EN(002) (1).pdf" OUT = r"d:\开发\OnebotCatalog\motor_pdf_dump.txt" def try_extract(): joined = "" # 1) pypdf try: from pypdf import PdfReader r = PdfReader(SRC) parts = [] for i, p in enumerate(r.pages): parts.append(f"--- PAGE {i+1} ---\n" + (p.extract_text() or "")) joined = "\n".join(parts) if len(joined.strip()) > 50: return "pypdf", len(r.pages), joined except Exception as e: print("[pypdf fail]", repr(e)) # 2) PyPDF2 try: import PyPDF2 r = PyPDF2.PdfReader(SRC) parts = [] for i, p in enumerate(r.pages): parts.append(f"--- PAGE {i+1} ---\n" + (p.extract_text() or "")) joined = "\n".join(parts) if len(joined.strip()) > 50: return "PyPDF2", len(r.pages), joined except Exception as e: print("[PyPDF2 fail]", repr(e)) # 3) pdfplumber try: import pdfplumber parts = [] with pdfplumber.open(SRC) as pdf: for i, p in enumerate(pdf.pages): parts.append(f"--- PAGE {i+1} ---\n" + (p.extract_text() or "")) joined = "\n".join(parts) if len(joined.strip()) > 50: return "pdfplumber", len(parts), joined except Exception as e: print("[pdfplumber fail]", repr(e)) # 4) pdfminer.six try: from pdfminer.high_level import extract_text joined = extract_text(SRC) if len(joined.strip()) > 50: return "pdfminer", "?", joined except Exception as e: print("[pdfminer fail]", repr(e)) return None, 0, "" def main(): if not os.path.exists(SRC): print("MISSING:", SRC) return lib, pages, text = try_extract() if not lib: print("NO_TEXT_EXTRACTED(可能是扫描/图片型 PDF)") return with open(OUT, "w", encoding="utf-8") as f: f.write(text) print("DONE") print("库:", lib, "| 页数:", pages, "| 字符数:", len(text)) print("输出:", OUT) print("=" * 60) print(text[:4000]) if __name__ == "__main__": main()