סקיל pdf: כל הכלים לעבודה עם קבצי PDF בקלוד קוד
pdf הוא הסקיל הרשמי של Anthropic שמעניק לקלוד קוד את כל הכלים לעבודה שיטתית עם קבצי PDF. מיזוג ופיצול, חילוץ טקסט וטבלאות, מילוי טפסים, OCR על סריקות ויצירת PDF חדש. עם כ-80 אלף התקנות שבועיות זה סקיל מסמכים פופולרי, והוא מיועד למפתחים ועסקים שמתמודדים עם עשרות קבצי PDF ביום. במדריך זה אסקור את היכולות, הספריות שהסקיל משתמש בהן, ומקרי שימוש אמיתיים מעבודה על מערכות לקוחות.
פקודת התקנה
npx skills add https://github.com/anthropics/skills --skill pdf
קובץ הסקיל הוא Markdown פתוח. אפשר להוריד אותו ולהריץ בדיקת קוד לפני התקנה דרך הכפתורים שבראש העמוד.
מה הסקיל כולל?
הסקיל מוסיף לקלוד קוד שכבת ידע מלאה על ספריות Python לעיבוד PDF, יחד עם כלי שורת פקודה מקבילים. הוא מכוון את קלוד לבחור את הספרייה הנכונה לכל משימה, ומתעד את הדפוסים הנפוצים לעבודה אמינה עם קבצי PDF.
קוד הסקיל המלא
---
name: pdf
description: Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.
license: Proprietary. LICENSE.txt has complete terms
---
# PDF Processing Guide
## Overview
This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.
## Quick Start
```python
from pypdf import PdfReader, PdfWriter
# Read a PDF
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")
# Extract text
text = ""
for page in reader.pages:
text += page.extract_text()
```
## Python Libraries
### pypdf - Basic Operations
#### Merge PDFs
```python
from pypdf import PdfWriter, PdfReader
writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
reader = PdfReader(pdf_file)
for page in reader.pages:
writer.add_page(page)
with open("merged.pdf", "wb") as output:
writer.write(output)
```
#### Split PDF
```python
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
with open(f"page_{i+1}.pdf", "wb") as output:
writer.write(output)
```
#### Extract Metadata
```python
reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Title: {meta.title}")
print(f"Author: {meta.author}")
print(f"Subject: {meta.subject}")
print(f"Creator: {meta.creator}")
```
#### Rotate Pages
```python
reader = PdfReader("input.pdf")
writer = PdfWriter()
page = reader.pages[0]
page.rotate(90) # Rotate 90 degrees clockwise
writer.add_page(page)
with open("rotated.pdf", "wb") as output:
writer.write(output)
```
### pdfplumber - Text and Table Extraction
#### Extract Text with Layout
```python
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
print(text)
```
#### Extract Tables
```python
with pdfplumber.open("document.pdf") as pdf:
for i, page in enumerate(pdf.pages):
tables = page.extract_tables()
for j, table in enumerate(tables):
print(f"Table {j+1} on page {i+1}:")
for row in table:
print(row)
```
#### Advanced Table Extraction
```python
import pandas as pd
with pdfplumber.open("document.pdf") as pdf:
all_tables = []
for page in pdf.pages:
tables = page.extract_tables()
for table in tables:
if table: # Check if table is not empty
df = pd.DataFrame(table[1:], columns=table[0])
all_tables.append(df)
# Combine all tables
if all_tables:
combined_df = pd.concat(all_tables, ignore_index=True)
combined_df.to_excel("extracted_tables.xlsx", index=False)
```
### reportlab - Create PDFs
#### Basic PDF Creation
```python
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter
# Add text
c.drawString(100, height - 100, "Hello World!")
c.drawString(100, height - 120, "This is a PDF created with reportlab")
# Add a line
c.line(100, height - 140, 400, height - 140)
# Save
c.save()
```
#### Create PDF with Multiple Pages
```python
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheet
doc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []
# Add content
title = Paragraph("Report Title", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))
body = Paragraph("This is the body of the report. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())
# Page 2
story.append(Paragraph("Page 2", styles['Heading1']))
story.append(Paragraph("Content for page 2", styles['Normal']))
# Build PDF
doc.build(story)
```
#### Subscripts and Superscripts
**IMPORTANT**: Never use Unicode subscript/superscript characters (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab PDFs. The built-in fonts do not include these glyphs, causing them to render as solid black boxes.
Instead, use ReportLab's XML markup tags in Paragraph objects:
```python
from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheet
styles = getSampleStyleSheet()
# Subscripts: use <sub> tag
chemical = Paragraph("H<sub>2</sub>O", styles['Normal'])
# Superscripts: use <super> tag
squared = Paragraph("x<super>2</super> + y<super>2</super>", styles['Normal'])
```
For canvas-drawn text (not Paragraph objects), manually adjust font the size and position rather than using Unicode subscripts/superscripts.
## Command-Line Tools
### pdftotext (poppler-utils)
```bash
# Extract text
pdftotext input.pdf output.txt
# Extract text preserving layout
pdftotext -layout input.pdf output.txt
# Extract specific pages
pdftotext -f 1 -l 5 input.pdf output.txt # Pages 1-5
```
### qpdf
```bash
# Merge PDFs
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
# Split pages
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf
# Rotate pages
qpdf input.pdf output.pdf --rotate=+90:1 # Rotate page 1 by 90 degrees
# Remove password
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf
```
### pdftk (if available)
```bash
# Merge
pdftk file1.pdf file2.pdf cat output merged.pdf
# Split
pdftk input.pdf burst
# Rotate
pdftk input.pdf rotate 1east output rotated.pdf
```
## Common Tasks
### Extract Text from Scanned PDFs
```python
# Requires: pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path
# Convert PDF to images
images = convert_from_path('scanned.pdf')
# OCR each page
text = ""
for i, image in enumerate(images):
text += f"Page {i+1}:n"
text += pytesseract.image_to_string(image)
text += "nn"
print(text)
```
### Add Watermark
```python
from pypdf import PdfReader, PdfWriter
# Create watermark (or load existing)
watermark = PdfReader("watermark.pdf").pages[0]
# Apply to all pages
reader = PdfReader("document.pdf")
writer = PdfWriter()
for page in reader.pages:
page.merge_page(watermark)
writer.add_page(page)
with open("watermarked.pdf", "wb") as output:
writer.write(output)
```
### Extract Images
```bash
# Using pdfimages (poppler-utils)
pdfimages -j input.pdf output_prefix
# This extracts all images as output_prefix-000.jpg, output_prefix-001.jpg, etc.
```
### Password Protection
```python
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
# Add password
writer.encrypt("userpassword", "ownerpassword")
with open("encrypted.pdf", "wb") as output:
writer.write(output)
```
## Quick Reference
| Task | Best Tool | Command/Code |
|------|-----------|--------------|
| Merge PDFs | pypdf | `writer.add_page(page)` |
| Split PDFs | pypdf | One page per file |
| Extract text | pdfplumber | `page.extract_text()` |
| Extract tables | pdfplumber | `page.extract_tables()` |
| Create PDFs | reportlab | Canvas or Platypus |
| Command line merge | qpdf | `qpdf --empty --pages ...` |
| OCR scanned PDFs | pytesseract | Convert to image first |
| Fill PDF forms | pdf-lib or pypdf (see FORMS.md) | See FORMS.md |
## Next Steps
- For advanced pypdfium2 usage, see REFERENCE.md
- For JavaScript libraries (pdf-lib), see REFERENCE.md
- If you need to fill out a PDF form, follow the instructions in FORMS.md
- For troubleshooting guides, see REFERENCE.md
מה זה סקיל pdf ולמה הוא חשוב?
pdf הוא הסקיל הרשמי של Anthropic שמתמקד בעיבוד קבצי PDF. הוא לא סקיל עיצוב ולא סקיל ניהול, אלא חבילת ידע ממוקדת שמלמדת את קלוד קוד איך לעבוד עם פורמט המסמכים הנפוץ בעולם העסקי.
הבעיה שהסקיל פותר מוכרת לכל מי שטיפל בקבצי PDF מרובים. הפורמט נוצר להיות קבוע מבחינה ויזואלית, אך לא נוח לעיבוד אוטומטי. יש עשרות ספריות Python ותוכנות שורת פקודה שמטפלות בו, לכל אחת חוזקות ומגבלות שונות. בלי הסקיל, קלוד קוד מנחש איזו ספרייה להשתמש וכותב קוד שלא תמיד עובד מול כל סוגי ה-PDF. עם הסקיל, הבחירה מובנית והקוד עובד.
הסקיל עצמו הוא קובץ Markdown של כ-8 קילו-בייט שמתעד את הדפוסים הנכונים לכל משימה. הוא מראה מתי לבחור ב-pypdf שמהיר ומתי לבחור ב-pdfplumber שמדויק יותר. הוא מזהיר מפני מלכודות נפוצות כמו Unicode subscripts ב-reportlab שנראים כריבועים שחורים. הוא מנגיש את תחום העיבוד הזה למי שלא עוסק בו יום-יום.
בעסקים שעובדים עם מסמכים מכל סוג, היכולת לייצר מערכות עיבוד מסמכים אוטומטיות חוסכת שעות ידניות של העברת נתונים. הסקיל הזה משתלב מעולה עם אוטומציות עסקיות שעוסקות במסמכים, כמו סריקת חוזים והפקת דוחות. ההרצה המקומית מתנהלת ב-סביבת קלוד קוד שסקרתי בנפרד, ובה אפשר לראות את הפלט של כל סקריפט לפני שליחתו לייצור.
מה סקיל pdf נותן לקלוד קוד?
הסקיל מוסיף לקלוד קוד ארבעה תחומי פעילות מרכזיים סביב קבצי PDF, כל אחד עם בחירה של ספריות מתועדות ודפוסי קוד שעובדים על קבצים אמיתיים, ולא על מה שתיאורטית יכול לעבוד.
חילוץ טקסט וטבלאות
הסקיל משתמש ב-pypdf לחילוץ מהיר של טקסט לא-מעוצב, וב-pdfplumber כשצריך לשמור Layout או להוציא טבלאות שלמות ישירות ל-DataFrame של pandas. הוא יודע לבחור את הכלי הנכון לפי סוג הקובץ.
מיזוג, פיצול וסיבוב
איחוד של עשרות קבצי PDF לקובץ אחד, פיצול של מסמך ארוך לדפים נפרדים, סיבוב של דפים בודדים והוספת סימן מים על כל הדפים. הכל בפקודות ברורות שהסקיל מכיר ומיישם אוטומטית.
OCR על PDF סרוקים
הסקיל מטפל בסריקות שלא מכילות שכבת טקסט חיפושית. הוא ממיר כל עמוד לתמונה עם pdf2image, מריץ pytesseract להכרת תווים, ומחזיר מסמך טקסטואלי שאפשר לחפש בו. שימושי במיוחד לארכיוני ישנים.
מילוי טפסים והצפנה
הסקיל יודע לקרוא טפסי PDF אינטראקטיביים, למפות את כל השדות, ולמלא אותם באופן פרוגרמטי לפי נתונים ממקורות חיצוניים. גם הצפנה ופענוח של קבצים רגישים זמינים דרך qpdf ו-pypdf.
בלי הסקיל, כל משימת PDF מתחילה מקריאה בסטאק אוברפלו והתנסות עם מספר ספריות. עם הסקיל, קלוד קוד מזהה את סוג המשימה ובוחר את הכלי הנכון תוך שניות.
למי הסקיל הזה מתאים?
רואי חשבון והנהלת חשבונות: מי שעובד עם עשרות חשבוניות PDF בחודש וצריך לחלץ מהן נתונים באופן אוטומטי. הסקיל מאפשר לבנות סקריפט שמחלץ מספר, תאריך, סכום ופרטי ספק, ומייצא הכל ל-CSV או לדוח Excel. חוסך שעות רבות של הקלדה ידנית.
משרדי עורכי דין: תהליכים חוזרים של חתימה דיגיטלית, הצפנה, מיזוג חוזים. הסקיל מאפשר לבנות מערכת שמטפלת בכל זה אוטומטית עם פיתוח מערכת פנימית מתאימה. בנוסף, OCR על ארכיונים ישנים מאפשר לחפש בהם בצורה חדשה.
חברות SaaS שמפיקות דוחות ללקוחות: יצירת PDF חודשי או שבועי עם נתונים מותאמים אישית לכל לקוח. הסקיל יחד עם reportlab מאפשר לבנות מערכת דוחות שלמה שמייצרת מאות PDF דקות ספורות, כל אחד מותאם לחתימה שונה.
חוקרים, אקדמאים ועיתונאים: מי שצריך לעבוד עם קבצי PDF רבים של מאמרים או מסמכים ממשלתיים. הסקיל מאפשר חילוץ מהיר של טקסט מלא, חיפוש באוספים גדולים של מסמכים, והוצאה של ציטוטים ספציפיים. הוא משתלב בנוהל המחקר המואץ עם קלוד קוד.
מי שלא מתאים: פרויקטים שעוסקים אך ורק ב-PDF בודד ופשוט (בדיקה חד-פעמית, פתיחת קובץ מזדמן). עבורם אקרובט Reader מספיק. הסקיל מכוון למי שעובד עם PDF בצורה חוזרת וצריך מערכת אוטומטית, לא לפתרון חד-פעמי.
איך סקיל pdf עזר לי בפרויקטים אמיתיים
ארגון 200 חשבוניות בחודש לקוח גדול
לקוח קיבל 200 חשבוניות חודשיות משותפים שונים, חלקן סרוקות וחלקן דיגיטליות. בנינו סקריפט עם הסקיל שמזהה אוטומטית אם יש שכבת טקסט או שצריך OCR, מחלץ מספרי חשבונית ותאריכים, ממזג הכל לקובץ מאוחד לפי ספק, ושומר CSV לצורך הנהלת חשבונות.
מילוי אוטומטי של טופס הצעת מחיר
עסק שלחתי לו 20-30 הצעות מחיר בשבוע על אותו טופס PDF סטנדרטי. הסקיל למד את מיפוי השדות פעם אחת, ומאז הוא ממלא את הטופס אוטומטית על סמך נתונים מה-CRM. זמן העבודה צנח מ-10 דקות להצעה לשתי דקות.
חילוץ טבלאות מדוחות חודשיים ל-Excel
לקוח בתחום הפיננסים קיבל דוחות חודשיים כ-PDF עם 40 עמודים ומספר רב של טבלאות. הסקיל השתמש ב-pdfplumber כדי לחלץ את הטבלאות, לנרמל עמודות, ולייצא Excel מאוחד עם כל החודשים. מה שהיה יומיים עבודה ידנית הפך לסקריפט של שתי דקות.
הצפנה אוטומטית של מסמכים לפני שליחה
משרד עורכי דין שצריך לשלוח חוזים מוצפנים ללקוחות. הסקיל מצפין כל PDF לפני השליחה עם סיסמה ייחודית שנשלחת ללקוח במסרון נפרד. המשרד חסך שעתיים ביום של הצפנה ידנית, וקיבל מערכת עקבית שלא שוכחת להצפין אף פעם.
ארבעת המקרים האלה מדגימים שהסקיל הוא כלי אמיתי לעסקים, לא רק המחשה אקדמית. בכל פרויקט, הזמן הנחסך על אוטומציה של עבודת PDF הצדיק את שעות ההטמעה של הסקיל פי כמה וכמה. כל הפרויקטים האלה נבנו גם בעזרת סקיל נוסף של skill-creator שעזר לעצב סקילים פנימיים לשלבי העבודה.
סיכום
pdf של Anthropic הוא סקיל חובה לכל מי שעובד עם מסמכים באופן קבוע. הוא כולל את כל הכלים החשובים, מתעד את הדפוסים הנכונים, ונפתח את הדלת ליצירת מערכות עיבוד מסמכים חזקות בלי לכתוב את הלוגיקה מאפס.
אם אתם מתחילים, הריצו את פקודת ההתקנה, בקשו מקלוד לחלץ טבלה מקובץ PDF שיש לכם, והתרשמו מהמהירות. אחרי שתראו איך הוא עובד על קובץ אחד, אפשר לבנות סקריפטים שעובדים על תיקיות שלמות.
בסקירות הבאות אבחן את סקיל pptx ליצירת מצגות ואת סקיל xlsx לעבודה עם Excel. יחד שלושתם נותנים לקלוד קוד שליטה מלאה על חבילת המסמכים הנפוצה בעולם העסקי. לעסקים שמתמודדים עם עומס מסמכים זה חיסכון זמן משמעותי.
שיתוף הסקיל
שאלות ותשובות
האם צריך לדעת Python כדי להשתמש בסקיל?
לא בהכרח. קלוד קוד יודע לכתוב את כל הקוד במקומכם על סמך הסקיל. מספיק לתאר מה רוצים לעשות ("מזג לי את כל ה-PDF בתיקייה לקובץ אחד") והסקיל מטפל בבחירת הספרייה ובכתיבת הקוד. רמת הידע הנדרשת היא ברמה של הרצת פקודה בטרמינל.
באיזו ספרייה הסקיל משתמש בפועל?
הסקיל מכיר כמה ספריות ובוחר לפי המשימה. ל-pypdf יש יעילות גבוהה למשימות פשוטות של מיזוג ופיצול. ל-pdfplumber יש יכולות עיקר של חילוץ טבלאות ושמירת Layout. ל-reportlab יש כלים ליצירת PDF מאפס. ול-qpdf יש פקודות shell חזקות למשימות שלא צריכות Python.
האם הסקיל עובד עם PDF בעברית?
כן. pypdf ו-pdfplumber תומכים בעברית באופן שוטף. הפלט המחולץ יופיע מימין לשמאל וישמור על ניקוד אם הוא קיים. רק במקרים של PDF סרוקים לעברית צריך לוודא ש-pytesseract הותקן עם חבילת השפה העברית (tesseract-ocr-heb) כדי שה-OCR יעבוד.
מה קורה אם ה-PDF מוגן בסיסמה?
אם יש לכם את הסיסמה, הסקיל יודע לעבוד איתה דרך pypdf.decrypt(). אם אין סיסמה, הסקיל לא ישבור את ההגנה. הוא מתכוון רק לקבצים שאתם רשאים לקרוא. במקרים של קבצי PDF ישנים עם הצפנה חלשה, אפשר להפעיל qpdf ידנית אם יש הצדקה חוקית.
האם OCR מספיק מדויק לעברית?
לשפות לטיניות pytesseract נותן דיוק של כ-95% על סריקות איכותיות. לעברית הדיוק נמוך יותר, בדרך כלל סביב 88%-92%, תלוי באיכות הסריקה וגודל הגופן. לטקסטים קריטיים כמו מסמכים משפטיים לא הייתי מסתמך על OCR בלבד, אלא מסמן את המסמכים לבדיקה ידנית.
האם אפשר ליצור PDF חדש מאפס?
כן. הסקיל כולל הנחיות ל-reportlab, ספריית Python מקיפה ליצירת מסמכי PDF עם כותרות, פסקאות, טבלאות, תמונות ועוד. הוא טוב במיוחד ליצירת דוחות אוטומטיים מנתונים במסד נתונים, או לחשבוניות שנוצרות לפי תבנית.
מה ההבדל בין הסקיל הזה לסקיל docx או pptx?
כל אחד מהסקילים מתמחה בסוג מסמכים שונה. pdf מיועד לעבודה עם קבצי PDF בלבד. docx עוסק במסמכי Word ו-pptx במצגות PowerPoint. אם העבודה שלכם כוללת מעבר בין הפורמטים, כדאי להתקין את שלושת הסקילים יחד. לכל אחד יש חוזקות שונות ויסודות שונים.
האם הסקיל מתעדכן אוטומטית?
לא. הסקיל הוא קובץ Markdown שמותקן אצלכם בתיקיית הסקילים של קלוד קוד. כדי לקבל גרסה עדכנית הריצו npx skills add https://github.com/anthropics/skills --skill pdf --force. Anthropic מעדכנים את הסקילים מעת לעת, בדרך כלל תוספת של דפוסי עבודה חדשים ותיקוני באגים.