使用 python3 显示 PDF 文件

Posted

技术标签:

【中文标题】使用 python3 显示 PDF 文件【英文标题】:Displaying PDF files with python3 【发布时间】:2012-03-29 18:02:03 【问题描述】:

我想编写一个显示 PDF 文件的 python3/PyGTK3 应用程序,但我找不到允许我这样做的 python 包。 有pypoppler,但是看起来过时了(?),似乎不支持python3(?)

你有什么建议吗?

编辑:请注意,我不需要花哨的功能,例如 pdf 表单、操作或写作。

【问题讨论】:

不,而且很可能永远不必这样做。 好的...bt 我提供了链接...在此评论出现之前...bt 你也可以检查一下.. 嵌入一些东西,比如 ghostscript 或其他查看器,可能是一种选择。不需要那样用 Python 编写。 嵌入听起来不是一个可行的解决方案,因为我需要在显示像素图之前对其进行操作。 从技术上讲,没有 PyGTK 3 这样的东西,它现在(有点令人困惑)称为 PyGObject。 【参考方案1】:

事实证明,新版本的 poppler-glib 不需要这样的绑定。它们附带 GObject Introspection 文件,因此可以按如下方式导入和使用:

#!/usr/bin/python3

import gi
gi.require_version('Poppler', '0.18')

from gi.repository import Poppler

document = Poppler.Document.new_from_file("file:///home/me/some.pdf", None)
print(document.get_pdf_version_string())

这很容易,不是吗?我花了好几个小时才发现...

请注意,如果还想导入 GTK,至少需要 poppler-0.18。

这是另一个带有 GUI 的最小示例:

#!/usr/bin/python3
import gi
gi.require_version('Poppler', '0.18')
gi.require_version('Gtk', '3.0')

from gi.repository import Poppler, Gtk

def draw(widget, surface):
    page.render(surface)
    
document = Poppler.Document.new_from_file("file:///home/me/some.pdf", None)
page = document.get_page(0)

window = Gtk.Window(title="Hello World")
window.connect("delete-event", Gtk.main_quit)
window.connect("draw", draw)
window.set_app_paintable(True)

window.show_all()
Gtk.main()

【讨论】:

【参考方案2】:

This post 表示 Evince 的最新开发版本(我猜很快会变成 3.4)支持通过 PyGObject 嵌入,这可能适合您的目的。

【讨论】:

我认为不会,因为我无法访问和修改像素图。我想使用一个包将 pdf 文件呈现为像素图,用(比如说)cairo 修改它并显示它。抱歉,如果我的问题不够清楚

以上是关于使用 python3 显示 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

支持python3.5的pdf文件处理库都有哪些

Python3批量合并多个PDF文件内容到一个PDF文件

Python3 Django -> HTML 到 PDF

pycharm设置创建文件时默认显示创建时间等信息

Python3中urllib使用与源代码

Python3自动化_文件批量处理(文本PDF;读取筛选导出)