Skip to main content

pdf-verification-cli

Verify PDF page count and content using command-line tools when Python libraries unavailable

معلومات المصدر

المستودع
HKUDS/OpenSpace
آخر نشاط في المصدر
١٧ يوليو ٢٠٢٦ في ٠٣:٤٣
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٧٬٧٧٦
التفرعات
٩٢٦

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
2 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
pdf-verification-cli
description
Verify PDF page count and content using command-line tools when Python libraries unavailable
# PDF Verification with Command-Line Tools When verifying PDF files during task execution, Python libraries like PyPDF2 may not be available in the environment. This skill provides a reliable alternative using standard command-line tools from the `poppler-utils` package. ## When to Use This Skill - Need to verify PDF page count - Need to inspect PDF text content - PyPDF2 or similar Python PDF libraries are unavailable - Working in minimal/containerized environments ## Core Tools ### 1. `pdfinfo` - Extract PDF Metadata Use `pdfinfo` to get page count and other metadata: ```bash # Get full PDF info pdfinfo document.pdf # Get only page count pdfinfo document.pdf | grep Pages # Extract page count as a number pdfinfo document.pdf | grep Pages | awk '{print $2}' ``` **Key metadata fields:** - `Pages`: Number of pages in the PDF - `Title`: Document title - `Author`: Document author - `Creator`: Application that created the PDF - `Producer`: Application that processed the PDF - `CreationDate`: When the PDF was created - `ModDate`: Last modification date ### 2. `pdftotext` - Extract Text Content Use `pdftotext` to inspect the actual content of the PDF: ```bash # Extract all text to stdout pdftotext document.pdf - # Extract text to a file pdftotext document.pdf output.txt # Extract text from specific page range pdftotext -f 1 -l 3 document.pdf output.txt # Preserve layout (rough formatting) pdftotext -layout document.pdf output.txt ``` ## Verification Workflow ### Step 1: Check Tool Availability ```bash # Check if tools are installed which pdfinfo which pdftotext # Or test with --help pdfinfo --help 2>&1 | head -1 ``` ### Step 2: Install if Needed ```bash # Debian/Ubuntu apt-get update && apt-get install -y poppler-utils # RHEL/CentOS/Fedora yum install -y poppler-utils # or dnf install -y poppler-utils # macOS (with Homebrew) brew install poppler ``` ### Step 3: Verify PDF Properties ```bash # Verify page count matches expected EXPECTED_PAGES=4 ACTUAL_PAGES=$(pdfinfo document.pdf | grep Pages | awk '{print $2}') if [ "$ACTUAL_PAGES" -eq "$EXPECTED_PAGES" ]; then echo "✓ Page count verified: $ACTUAL_PAGES pages" else echo "✗ Page count mismatch: expected $EXPECTED_PAGES, got $ACTUAL_PAGES" fi ``` ### Step 4: Verify PDF Content ```bash # Check for required sections/content pdftotext document.pdf - | grep -i "checklist" && echo "✓ Contains checklist section" pdftotext document.pdf - | grep -i "references" && echo "✓ Contains references section" # Count occurrences of key terms pdftotext document.pdf - | grep -ci "assessment" # Case-insensitive count ``` ## Python Integration Example ```python import subprocess def get_pdf_page_count(pdf_path): """Get page count using pdfinfo""" result = subprocess.run( ['pdfinfo', pdf_path], capture_output=True, text=True ) for line in result.stdout.split('\n'): if line.startswith('Pages:'): return int(line.split(':')[1].strip()) return None def extract_pdf_text(pdf_path): """Extract all text from PDF using pdftotext""" result = subprocess.run( ['pdftotext', pdf_path, '-'], capture_output=True, text=True ) return result.stdout def verify_pdf(pdf_path, expected_pages, required_terms): """Verify PDF has expected page count and contains required terms""" # Check page count pages = get_pdf_page_count(pdf_path) if pages != expected_pages: return False, f"Expected {expected_pages} pages, got {pages}" # Check content text = extract_pdf_text(pdf_path).lower() missing = [term for term in required_terms if term.lower() not in text] if missing: return False, f"Missing terms: {missing}" return True, "PDF verification passed" ``` ## Common Use Cases | Task | Command | |------|---------| | Count pages | `pdfinfo file.pdf \| grep Pages` | | Check if PDF has text | `pdftotext file.pdf - \| head -5` | | Search for keyword | `pdftotext file.pdf - \| grep -i "keyword"` | | Extract first page | `pdftotext -f 1 -l 1 file.pdf out.txt` | | Get PDF title | `pdfinfo file.pdf \| grep Title` | ## Troubleshooting **`pdfinfo: command not found`** - Install poppler-utils (see Step 2 above) - Ensure PATH includes the installation directory **`pdftotext` returns empty output** - PDF may be image-only (scanned) - requires OCR - PDF may be encrypted/password-protected - Try `pdftotext -layout` for better text extraction **Page count seems wrong** - Some PDFs have blank pages counted - Verify with `pdftotext` to see actual content per page ## Best Practices 1. **Always verify both structure and content** - Page count alone doesn't guarantee content quality 2. **Use case-insensitive searches** - Content may vary in capitalization 3. **Handle errors gracefully** - Tools may fail on corrupted or encrypted PDFs 4. **Combine with file existence checks** - Verify PDF exists before running tools
عرض على GitHub