PythonIDE Docs
中文
简体中文

pdf

创建、读取、渲染和预览 PDF 文档。

PDF 创建、读取、渲染与预览:文本/图片/HTML 转 PDF、提取文字、单页截图、QuickLook 预览。

边界:操作本地文件路径;preview() 弹出系统 QuickLook 查看器。不含 PDF 表单填写、数字签名等高级编辑。

#模块概览

说明
导入import pdf
适合做什么导出报告、相册转 PDF、提取文字、预览文档
调用时机创建/读取放按钮回调;preview() 会弹全屏查看器
推荐顺序创建 → info() 确认页数 → preview()extract_text()
路径使用 App 可写目录(如 ~/Documents

#快速开始

从纯文本创建 PDF 并读取元数据:

python
import os
import pdf

out = os.path.join(os.path.expanduser("~/Documents"), "note.pdf")
pdf.create_from_text(out, "第一行\n第二行", title="笔记")
print(pdf.info(out))
print(pdf.extract_text(out))

从 HTML 渲染:

python
import os
import pdf

path = os.path.join(os.path.expanduser("~/Documents"), "report.pdf")
pdf.from_html("<h1>周报</h1><p>本周进展良好。</p>", path)
pdf.preview(path)

#AppUI 示例

创建与预览放在按钮回调;界面展示页数与提取摘要。

python
import appui
import os
import pdf

DOC = os.path.join(os.path.expanduser("~/Documents"), "pdf-demo.pdf")

state = appui.State(
    pages="—",
    preview="未创建",
    snippet="点击按钮生成示例 PDF",
)


def create_demo():
    pdf.create_from_text(
        DOC,
        "PythonIDE PDF 示例\n\n这是第二段文字。",
        title="PDF 演示",
    )
    meta = pdf.info(DOC) or {}
    text = pdf.extract_text(DOC) or ""
    state.batch_update(
        pages=str(meta.get("page_count", "—")),
        preview="已生成",
        snippet=text[:120] + ("…" if len(text) > 120 else ""),
    )


def open_preview():
    if not os.path.exists(DOC):
        state.snippet = "请先生成 PDF"
        return
    pdf.preview(DOC)
    state.preview = "已打开 QuickLook"


def body():
    return appui.NavigationStack(
        appui.Form([
            appui.Section("操作", [
                appui.Button("生成示例 PDF", action=create_demo)
                .button_style("bordered_prominent"),
                appui.Button("QuickLook 预览", action=open_preview),
            ]),
            appui.Section("状态", [
                appui.LabeledContent("页数", value=state.pages),
                appui.LabeledContent("文件", value=state.preview),
                appui.Text(state.snippet).foreground_color("secondaryLabel"),
            ]),
        ]).navigation_title("PDF")
    )


appui.run(body, state=state)

#API 参考

#速查

API作用
create_from_text(path, text, title=None)纯文本 → PDF
create_from_images(path, image_paths)多图 → 多页 PDF
from_html(html, path)HTML 字符串 → PDF
extract_text(path)提取全文
info(path)元数据 page_count / title / author / encrypted
page_image(path, index=0, scale=2.0)单页渲染为 PNG bytes
preview(path)弹出 QuickLook 预览

#创建

python
pdf.create_from_text("/path/note.pdf", "Hello\nWorld", title="Note")
pdf.create_from_images("/path/album.pdf", ["/path/a.jpg", "/path/b.jpg"])
pdf.from_html("<h1>Report</h1>", "/path/report.pdf")

#读取

info(path) — 返回元数据字典。

extract_text(path) — 返回完整文本字符串。

page_image(path, index=0, scale=2.0) — 将指定页渲染为 PNG 原始字节;失败抛 PDFError

#预览

preview(path) — 呈现原生 QuickLook 查看器,返回 True 表示成功弹出。

#异常

PDFError(message, code=None) — 原生能力入口不可用或操作失败时抛出。


#常见错误

错误写法后果修正
路径不可写创建失败使用 ~/Documents 等沙盒目录
body() 里调用 preview()每次刷新弹查看器放进按钮回调
page_image 结果当路径用类型错误返回值是 bytes,需自行保存
期望编辑已有 PDF超出能力仅支持创建、读取、渲染

#相关文档

文档用途
photos选图后 create_from_images
share生成后通过分享面板发送
file_picker选择已有 PDF 路径

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。