|
- import argparse
- import pathlib
-
- import pdfplumber
- from pypdf import PdfReader
-
-
- def extract_frontmatter(pdf_path: pathlib.Path, pages: int) -> str:
- chunks: list[str] = []
- with pdfplumber.open(str(pdf_path)) as pdf:
- max_page = min(pages, len(pdf.pages))
- for index in range(max_page):
- text = pdf.pages[index].extract_text(x_tolerance=1, y_tolerance=3) or ""
- chunks.append(f"\n## Page {index + 1}\n\n{text.strip()}\n")
- return "\n".join(chunks)
-
-
- def main() -> None:
- parser = argparse.ArgumentParser(description="Probe Xinje PDF manuals for page counts and frontmatter text.")
- parser.add_argument("--manual-dir", required=True, type=pathlib.Path)
- parser.add_argument("--output", required=True, type=pathlib.Path)
- parser.add_argument("--pages", type=int, default=12)
- args = parser.parse_args()
-
- args.output.parent.mkdir(parents=True, exist_ok=True)
- chunks: list[str] = ["# PDF Manual Probe\n"]
- for pdf_path in sorted(args.manual_dir.glob("*.pdf")):
- reader = PdfReader(str(pdf_path))
- chunks.append(f"\n# {pdf_path.name}\n")
- chunks.append(f"- Path: `{pdf_path}`")
- chunks.append(f"- Size bytes: {pdf_path.stat().st_size}")
- chunks.append(f"- PDF pages: {len(reader.pages)}")
- chunks.append(extract_frontmatter(pdf_path, args.pages))
-
- args.output.write_text("\n".join(chunks), encoding="utf-8")
- print(f"wrote {args.output}")
-
-
- if __name__ == "__main__":
- main()
|