Project Icon

pypandoc

Python实现的多格式文档转换工具

pypandoc是pandoc文档转换工具的Python封装库,支持多种格式间的转换,如Markdown到PDF、HTML到Word等。它提供简洁的API,支持自定义参数和过滤器,能处理Unicode文本。pypandoc可通过pip安装,也提供包含pandoc的二进制包。作为一个灵活的文档处理工具,pypandoc简化了在Python中使用pandoc的过程。

pypandoc

构建状态 GitHub 发布 Pypandoc PyPI 版本 Pypandoc Binary PyPI 版本 PyPandoc PyPi 下载量 PyPandoc Binary PyPI 下载量 conda 版本 开发状态 PyPandoc Python 版本 PyPandoc Binary Python 版本 许可证

Pypandoc 为 pandoc(一个通用文档转换器)提供了一个轻量级的封装。

安装

Pypandoc 使用 pandoc,因此需要可用的 pandoc 安装。Pypandoc 提供了两个包:"pypandoc" 和 "pypandoc_binary",后者包含了开箱即用的 pandoc。 这两个包完全相同,唯一的区别是一个包含 pandoc,而另一个不包含。

如果已经安装了 pandoc(即 pandoc 在 PATH 中),pypandoc 会使用版本号较高的版本,如果版本号相同,则使用已安装的版本。有关更多信息,请参阅指定 pandoc 二进制文件的位置

要使用 pandoc 过滤器,您必须在机器上安装相关的过滤器。

通过 pip 安装

如果您想自己安装 pandoc 或使用不受支持的平台,您需要安装 "pypandoc" 并手动安装 pandoc

pip install pypandoc

如果您想要开箱即用的 pandoc,可以使用我们的 pypandoc_binary 包,它与 "pypandoc" 包完全相同,但包含了 pandoc。

pip install pypandoc_binary

Windows 和 Mac OS X 的预构建 wheel

如果您使用 Linux 并有自己的 wheelhouse, 您可以构建一个包含 pandoc 的 wheel,使用 python setup_binary.py download_pandoc; python setup.py bdist_wheel。请注意,这仅适用于 64 位 Intel 系统,因为我们只从官方发布下载。

通过 conda 安装

Pypandoc 包含在 conda-forge 中。conda 包也会 安装 pandoc 包,因此 pandoc 在安装中可用。

通过 conda install -c conda-forge pypandoc 安装。

您还可以通过 conda config --add channels conda-forge 将该频道添加到您的 conda 配置中。这样就可以 直接使用 conda install pypandoc,并通过 conda update pypandoc 进行更新。

安装 pandoc

如果您的系统上还没有 pandoc,或者没有安装包含 pandoc 的 pypandoc_binary 包,您需要自己安装 pandoc。

通过 pypandoc 安装 pandoc

在 Windows、Mac OS X 或 Linux(基于 Intel,64 位)上可以通过 pypandoc 安装:

pip install pypandoc
from pypandoc.pandoc_download import download_pandoc
# 请参阅文档了解如何自定义安装路径
# 但请注意,您需要将其包含在 `PATH` 中
download_pandoc()

默认安装位置已包含在 pandoc 的搜索路径中,因此您 不需要将其添加到 PATH 中。

默认情况下,会安装最新的 pandoc 版本。如果您想指定自己的版本,比如 1.19.1,请使用 download_pandoc(version='1.19.1') 替代。

手动安装 pandoc

也可以通过系统机制手动安装。这种安装机制 使 pandoc 在更多平台上可用:

  • Ubuntu/Debian:sudo apt-get install pandoc
  • Fedora/Red Hat:sudo yum install pandoc
  • Arch:sudo pacman -S pandoc
  • Mac OS X 使用 Homebrew:brew install pandoc pandoc-citeproc Caskroom/cask/mactex
  • 带有 Haskell 的机器:cabal-install pandoc
  • Windows:有一个安装程序可用 这里
  • FreeBSD 使用 pkg: pkg install hs-pandoc
  • 或参见 Pandoc - 安装 pandoc

请注意,并非所有安装机制都会将 pandoc 放入 PATH 中,因此您需要 自己更改 PATH 或在 PYPANDOC_PANDOC 中设置 pandoc 的完整 PATH。 有关更多信息,请参阅下一节。

指定 pandoc 二进制文件的位置

您可以通过设置环境变量 PYPANDOC_PANDOC 来指向特定的 pandoc 版本, 将其设置为 pandoc 二进制文件的完整 PATHPYPANDOC_PANDOC=/home/x/whatever/pandocPYPANDOC_PANDOC=c:\pandoc\pandoc.exe)。 如果设置了此环境变量,这将是唯一搜索 pandoc 的地方。

在某些情况下,例如安装了 pandoc 但具有自己用户的 Web 服务器 无法找到二进制文件,在运行时指定位置会很有用:

import os
os.environ.setdefault('PYPANDOC_PANDOC', '/home/x/whatever/pandoc')

使用方法

使用 pypandoc 有两种基本方式:使用输入文件或使用输入 字符串。

import pypandoc

# 使用输入文件:它会从文件名推断输入格式
output = pypandoc.convert_file('somefile.md', 'rst')

# ...但您可以通过 `format` 参数覆盖格式:
output = pypandoc.convert_file('somefile.txt', 'rst', format='md')

# 或者您也可以直接传递一些字符串。在这种情况下,您需要
# 定义输入格式:
output = pypandoc.convert_text('# some title', 'rst', format='md')
# output == 'some title\r\n==========\r\n\r\n'

convert_text 期望这个字符串是 unicode 或 utf-8 编码的字节。convert_* 将始终 返回一个 unicode 字符串。

也可以直接让 pandoc 将输出写入文件。这是转换为某些输出格式的唯一方法 (例如 odt、docx、epub、epub3、pdf)。在这种情况下,convert_*() 将 返回一个空字符串。

import pypandoc

output = pypandoc.convert_file('somefile.md', 'docx', outputfile="somefile.docx")
assert output == ""

还可以指定多个输入文件给 pandoc,可以是绝对路径、相对路径或文件模式。

import pypandoc

# 转换 chapters/ 子目录中的所有 markdown 文件。
pypandoc.convert_file('chapters/*.md', 'docx', outputfile="somefile.docx")

# 转换 book1 和 book2 目录中的所有 markdown 文件。
pypandoc.convert_file(['book1/*.md', 'book2/*.md'], 'docx', outputfile="somefile.docx")

# 转换另一个驱动器上的前言,以及 chapter 目录中的所有 markdown 文件。
pypandoc.convert_file(['D:/book_front.md', 'book2/*.md'], 'docx', outputfile="somefile.docx")

也支持 pathlib。

import pypandoc
from pathlib import Path

# 单个文件
input = Path('somefile.md')
output = input.with_suffix('.docx')
pypandoc.convert_file(input, 'docx', outputfile=output)

# 转换 chapters/ 子目录中的所有 markdown 文件。
pypandoc.convert_file(Path('chapters').glob('*.md'), 'docx', outputfile="somefile.docx")

# 转换 book1 和 book2 目录中的所有 markdown 文件。
pypandoc.convert_file([*Path('book1').glob('*.md'), *Path('book2').glob('*.md')], 'docx', outputfile="somefile.docx")
# 如果 pathlib globs 在列表内部,必须解包。

除了 format,还可以传递 extra_args。 这使得可以轻松访问各种 pandoc 选项。

output = pypandoc.convert_text(
    '<h1>Primary Heading</h1>',
    'md', format='html',
    extra_args=['--atx-headers'])
# output == '# Primary Heading\r\n'
output = pypandoc.convert_text(
    '# Primary Heading',
    'html', format='md',
    extra_args=['--base-header-level=2'])
# output == '<h2 id="primary-heading">Primary Heading</h2>\r\n'

pypandoc 现在支持轻松添加 pandoc 过滤器

filters = ['pandoc-citeproc']
pdoc_args = ['--mathjax',
             '--smart']
output = pypandoc.convert_file(filename,
                               to='html5',
                               format='md',
                               extra_args=pdoc_args,
                               filters=filters)

请将任何过滤器作为列表传递,而不是作为字符串。

请参阅 pandoc -h官方文档 以了解更多详情。

处理格式化参数

Pandoc 支持通过 -V 参数进行自定义格式化。要通过 pypandoc 使用它,请使用如下代码:

output = pypandoc.convert_file('demo.md', 'pdf', outputfile='demo.pdf',
  extra_args=['-V', 'geometry:margin=1.5cm'])

注意:将 -V 及其参数在列表中分开很重要,否则 它将无法工作。这个陷阱与 subprocess.Popen 的工作方式有关。

记录消息

Pypandoc 使用 Python 日志库 记录消息。 默认情况下,它会将消息发送到控制台,包括 Pandoc 生成的任何消息。 如果需要,可以通过在调用任何函数之前向 pypandoc 日志记录器添加 处理程序来更改此行为。 例如,要静音所有日志记录,请添加一个空处理程序

import logging
logging.getLogger('pypandoc').addHandler(logging.NullHandler())

获取 Pandoc 版本

有时检查系统中可用的 pandoc 版本或 pypandoc 使用的特定 pandoc 二进制文件会很有用。为此,pypandoc 提供了以下实用函数。示例:

print(pypandoc.get_pandoc_version())
print(pypandoc.get_pandoc_path())
print(pypandoc.get_pandoc_formats())

相关项目

  • pydocverter 是一个名为 Docverter 的服务的客户端,该服务提供 pandoc 作为服务(外加一些额外功能)。
  • 查看 pyandoc,这是 Kenneth Reitz 实现的另一个 pandoc 封装器。不过这个项目已经有一段时间没有活跃了。
  • 查看 panflute,它提供了类似于 pypandoc 的 convert_text 功能。不过它的重点是编写和运行 pandoc 过滤器。

贡献

欢迎贡献。在开启 PR 时,请注意以下准则:

  1. 在实施之前,请先开一个 issue 进行讨论。
  2. 确保为新逻辑编写测试。
  3. 确保你的代码通过 flake8 pypandoc/*.py tests.py 检查。
  4. 如果你还不在贡献者列表中,请将自己添加到 README.md 的贡献者部分。如果已经在列表中,请更新你的贡献内容。

请注意,要通过 citeproc 测试,你需要安装 pandoc-citeproc。如果你安装了预构建的 wheel 或 conda 包,它已经包含在内。

贡献者

  • Jessica Tegner - 自 2021 年 7 月 1 日起的新维护者
  • Valentin Haenel - 字符串转换修复
  • Daniel Sanchez - 输入/输出格式的自动解析
  • Thomas G. - Python 3 支持
  • Ben Jao Ming - 在 pandoc 缺失时优雅地失败
  • Ross Crawford-d'Heureuse - 以 UTF-8 编码输入并添加 Django 示例
  • Michael Chow - 以 UTF-8 解码输出
  • Janusz Skonieczny - 支持 Windows 换行符并允许指定编码
  • gabeos - 修复帮助解析
  • Marc Abramowitz - 在 pandoc 缺失时使 setup.py 强制失败,Travis,Dockerfile,PyPI 徽章,Tox,PEP-8,改进文档
  • Daniel L. - 在 README 中添加 extra_args 示例
  • Amy Guy - Unicode 错误的异常处理
  • Florian Eßer - 允许在输出格式中使用 Markdown 扩展
  • Philipp Wendler - 允许在输入格式中使用 Markdown 扩展
  • Jan Katins - 处理输出到文件,使 Travis 在较新版本的 pandoc 上工作,返回代码检查,get_pandoc_version。帮助修复 Travis 构建,新的 convert_* API。pypandoc 的前任维护者
  • Aaron Gonzales - 添加了更好的过滤器处理
  • David Lukes - 启用非纯文本文件的输入,并确保测试在失败时正确清理模板文件
  • valholl - 正确设置许可信息并在发布版本中包含示例
  • Cyrille Rossant - 通过删除 pandoc 格式列表中的星号来修复错误。帮助修复 Travis 构建。
  • Paul Osborne - 不要求安装 pandoc 来安装 pypandoc
  • Felix Yan - 添加了 Arch Linux 的安装说明
  • Kolen Cheung - 实现 _get_pandoc_urls 以安装任意版本以及最新版本的 pandoc。次要:README,Travis,setup.py
  • Rebecca Heineman - 添加了在 Windows 中查找 pandoc 的扫描代码
  • Andrew Barraford - 下载目标
  • Jesse WidnerDominic Thorn - 添加对 lua 过滤器的支持
  • Alex Kneisel - 为 convert_file 添加 pathlib.Path 支持
  • Juho Vepsäläinen - pypandoc 的创建者和前任维护者
  • Connor - 将 Dockerfile 更新为 Python 3.9 镜像并添加 docker compose 文件

许可

Pypandoc 使用 MIT 许可证。有关更多详细信息,请参阅 LICENSE。Pandoc 本身使用 GPL2 许可证

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号