Coverage for agentos/marketplace/skills/pdf/pdf.py: 24%

29 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-06 12:29 +0800

1""" 

2pdf — PDF operations using PyPDF2. 

3 

4Actions: read, pages, metadata, extract_text 

5""" 

6 

7from typing import Any 

8 

9 

10def run(action: str = "read", file_path: str = "", page: int = 0, **kwargs: Any) -> str: 

11 try: 

12 from PyPDF2 import PdfReader 

13 except ImportError: 

14 return "[pdf] PyPDF2 not installed. Run: pip install PyPDF2" 

15 

16 try: 

17 reader = PdfReader(file_path) 

18 except FileNotFoundError: 

19 return f"[pdf] File not found: {file_path}" 

20 except Exception as e: 

21 return f"[pdf] Error: {e}" 

22 

23 if action == "metadata": 

24 meta = reader.metadata 

25 if meta: 

26 return f"Title: {meta.get('/Title','N/A')}\nAuthor: {meta.get('/Author','N/A')}\nPages: {len(reader.pages)}" 

27 return f"[pdf] No metadata. Pages: {len(reader.pages)}" 

28 

29 if action == "pages": 

30 return f"Total pages: {len(reader.pages)}" 

31 

32 if action == "read": 

33 text = "" 

34 for p in reader.pages[: min(len(reader.pages), 5)]: 

35 text += p.extract_text() or "" 

36 return text[:3000] or "[pdf] No extractable text on first 5 pages." 

37 

38 if action == "extract_text": 

39 p = reader.pages[page] 

40 return p.extract_text() or f"[pdf] No text on page {page + 1}." 

41 

42 return f"[pdf] Unknown action: {action}" 

43 

44 

45__all__ = ["run"]