当用户需要对PDF文件进行任何操作时,请使用此技能。包括从 PDF 中读取或提取文本/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新PDF、填写PDF表单、加密/解密 PDF、提取图片,以及对扫描版 PDF 进行 OCR 使其可搜索。如果用户提到 .pdf 文件或要求生成 PDF,请使用此技能。
DeepseekModel
キュレーション済みスキル
品質 優秀 · 90
v1.0.0
取得
https://deepseekmodel.com/api/download.php?id=agentscope-ai-qwenpaw-src-qwenpaw-agents-skills-pdf-zh-skill-md&format=skill
ダウンロード .skill
標準形式。system_prompt と model_config を収録し、任意の Agent で利用可能
.skill ファイルの system_prompt フィールドの実際の内容。
name pdf description 当用户需要对PDF文件进行任何操作时,请使用此技能。包括从 PDF 中读取或提取文本/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新PDF、填写PDF表单、加密/解密 PDF、提取图片,以及对扫描版 PDF 进行 OCR 使其可搜索。如果用户提到 .pdf 文件或要求生成 PDF,请使用此技能。 license Proprietary. LICENSE.txt has complete terms metadata {"builtin_skill_version":"1.1"} 重要: 所有 scripts/ 路径均相对于此技能目录。 运行方式: cd {this_skill_dir} && python scripts/... 或使用 execute_shell_command 的 cwd 参数。 PDF 处理指南 前置要求 pypdf :核心 PDF 读写功能 pdfplumber :文本和表格提取 reportlab :PDF 创建 pdftotext (poppler-utils):命令行文本提取 pdftoppm (poppler-utils):PDF 转图片 qpdf :PDF 操作(合并、拆分、旋转、解密) 概述 本指南涵盖了使用 Python 库和命令行工具进行 PDF 处理的基本操作。有关高级功能、JavaScript 库和详细示例,请参阅 REFERENCE.md。如果需要填写 PDF 表单,请阅读 FORMS.md 并按照其中的说明操作。 快速入门 from pypdf import PdfReader, PdfWriter # 读取 PDF reader = PdfReader( "document.pdf" ) print ( f"Pages: { len (reader.pages)} " ) # 提取文本 text = "" for page in reader.pages: text += page.extract_text() Python 库 pypdf - 基本操作 合并 PDF 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) 拆分 PDF 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) 提取元数据 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} " ) 旋转页面 reader = PdfReader( "input.pdf" ) writer = PdfWriter() page = reader.pages[ 0 ] page.rotate( 90 ) # 顺时针旋转 90 度 writer.add_page(page) with open ( "rotated.pdf" , "wb" ) as output: writer.write(output) pdfplumber - 文本和表格提取 提取带布局的文本 import pdfplumber with pdfplumber. open ( "document.pdf" ) as pdf: for page in pdf.pages: text = page.extract_text() print (text) 提取表格 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) 高级表格提取 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: # 检查表格是否为空 df = pd.DataFrame(table[ 1 :], columns=table[ 0 ]) all_tables.append(df) # 合并所有表格 if all_tables: combined_df = pd.concat(all_tables, ignore_index= True ) combined_df.to_excel( "extracted_tables.xlsx" , index= False ) reportlab - 创建 PDF 基本 PDF 创建 from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas c = canvas.Canvas( "hello.pdf" , pagesize=letter) width, height = letter # 添加文本 c.drawString( 100 , height - 100 , "Hello World!" ) c.drawString( 100 , height - 120 , "This is a PDF created with reportlab" ) # 添加线条 c.line( 100 , height - 140 , 400 , height - 140 ) # 保存 c.save() 创建多页 PDF 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 = [] # 添加内容 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()) # 第 2 页 story.append(Paragraph( "Page 2" , styles[ 'Heading1' ])) story.append(Paragraph( "Content for page 2" , styles[ 'Normal' ])) # 构建 PDF doc.build(story) 下标和上标 重要 :切勿在 ReportLab PDF 中使用 Unicode 下标/上标字符(₀₁₂₃₄₅₆₇₈₉、⁰¹²³⁴⁵⁶⁷⁸⁹)。内置字体不包含这些字形,会导致它们渲染为黑色方块。 请改用 ReportLab 在 Paragraph 对象中的 XML 标记标签: from reportlab.platypus import Paragraph from reportlab.lib.styles import getSampleStyleSheet styles = getSampleStyleSheet() # 下标:使用 <sub> 标签 chemical = Paragraph( "H<sub>2</sub>O" , styles[ 'Normal' ]) # 上标:使用 <super> 标签 squared = Paragraph( "x<super>2</super> + y<super>2</super>" , styles[ 'Normal' ]) 对于使用 canvas 绘制的文本(非 Paragraph 对象),请手动调整字体大小和位置,而不是使用 Unicode 下标/上标。 命令行工具 pdftotext (poppler-utils) # 提取文本 pdftotext input.pdf output.txt # 保留布局提取文本 pdftotext -layout input.pdf output.txt # 提取指定页面 pdftotext -f 1 -l 5 input.pdf output.txt # 第 1-5 页 qpdf # 合并 PDF qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf # 拆分页面 qpdf input.pdf --pages . 1-5 -- pages1-5.pdf qpdf input.pdf --pages . 6-10 -- pages6-10.pdf # 旋转页面 qpdf input.pdf output.pdf --rotate=+90:1 # 将第 1 页旋转 90 度 # 移除密码 qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf pdftk(如果可用) # 合并 pdftk file1.pdf file2.pdf cat output merged.pdf # 拆分 pdftk input.pdf burst # 旋转 pdftk input.pdf rotate 1east output rotated.pdf 常见任务 从扫描版 PDF 提取文本 # 需要安装:pip install pytesseract pdf2image import pytesseract from pdf2image import convert_from_path # 将 PDF 转换为图片 images = convert_from_path( 'scanned.pdf' ) # 对每页进行 OCR text = "" for i, image in enumerate (images): text += f"Page {i+ 1 } :\n" text += pytesseract.image_to_string(image) text += "\n\n" print (text) 添加水印 from pypdf import PdfReader, PdfWriter # 创建水印(或加载已有水印) watermark = PdfReader( "watermark.pdf" ).pages[ 0 ] # 应用到所有页面 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) 提取图片 # 使用 pdfimages (poppler-utils) pdfimages -j input.pdf output_prefix # 这会将所有图片提取为 output_prefix-000.jpg、output_prefix-001.jpg 等 密码保护 from pypdf import PdfReader, PdfWriter reader = PdfReader( "input.pdf" ) writer = PdfWriter() for page in reader.pages: writer.add_page(page) # 添加密码 writer.encrypt( "userpassword" , "ownerpassword" ) with open ( "encrypted.pdf" , "wb" ) as output: writer.write(output) 快速参考 任务 最佳工具 命令/代码 合并 PDF pypdf writer.add_page(page) 拆分 PDF pypdf 每页一个文件 提取文本 pdfplumber page.extract_text() 提取表格 pdfplumber page.extract_tables() 创建 PDF reportlab Canvas 或 Platypus 命令行合并 qpdf qpdf --empty --pages ... OCR 扫描版 PDF pytesseract 先转换为图片 填写 PDF 表单 pdf-lib 或 pypdf(见 FORMS.md) 见 FORMS.md 后续步骤 有关 pypdfium2 的高级用法,请参阅 REFERENCE.md 有关 JavaScript 库(pdf-lib),请参阅 REFERENCE.md 如果需要填写 PDF 表单,请按照 FORMS.md 中的说明操作 有关故障排除指南,请参阅 REFERENCE.md
このスキルを起動するキーワード。クリックでコピーできます。
このスキルにはトリガーワードがありません。
ダウンロードした .skill に含まれるフィールド。
| フィールド | 説明 |
|---|---|
| format | フォーマット識別子(skill/v1) |
| skill_id | スキル固有 ID |
| name | スキル名 |
| version | バージョン |
| description | 説明 |
| category | カテゴリ(配列) |
| trigger_words | トリガーワード |
| tags | タグ |
| source | ソース |
| source_url | ソース URL(本ページ) |
| exported_at | エクスポート日時(ダウンロード毎) |
| system_prompt | システムプロンプト本文 |
| model_config | モデル設定:provider / model / temperature / max_tokens / top_p |
| examples | サンプル |
| install_guide | 各プラットフォームの導入説明(Coze / Dify / Claude / カスタム) |