- 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