信捷PLCSkill
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

41 linhas
1.5 KiB

  1. import argparse
  2. import pathlib
  3. import pdfplumber
  4. from pypdf import PdfReader
  5. def extract_frontmatter(pdf_path: pathlib.Path, pages: int) -> str:
  6. chunks: list[str] = []
  7. with pdfplumber.open(str(pdf_path)) as pdf:
  8. max_page = min(pages, len(pdf.pages))
  9. for index in range(max_page):
  10. text = pdf.pages[index].extract_text(x_tolerance=1, y_tolerance=3) or ""
  11. chunks.append(f"\n## Page {index + 1}\n\n{text.strip()}\n")
  12. return "\n".join(chunks)
  13. def main() -> None:
  14. parser = argparse.ArgumentParser(description="Probe Xinje PDF manuals for page counts and frontmatter text.")
  15. parser.add_argument("--manual-dir", required=True, type=pathlib.Path)
  16. parser.add_argument("--output", required=True, type=pathlib.Path)
  17. parser.add_argument("--pages", type=int, default=12)
  18. args = parser.parse_args()
  19. args.output.parent.mkdir(parents=True, exist_ok=True)
  20. chunks: list[str] = ["# PDF Manual Probe\n"]
  21. for pdf_path in sorted(args.manual_dir.glob("*.pdf")):
  22. reader = PdfReader(str(pdf_path))
  23. chunks.append(f"\n# {pdf_path.name}\n")
  24. chunks.append(f"- Path: `{pdf_path}`")
  25. chunks.append(f"- Size bytes: {pdf_path.stat().st_size}")
  26. chunks.append(f"- PDF pages: {len(reader.pages)}")
  27. chunks.append(extract_frontmatter(pdf_path, args.pages))
  28. args.output.write_text("\n".join(chunks), encoding="utf-8")
  29. print(f"wrote {args.output}")
  30. if __name__ == "__main__":
  31. main()