平台: Linux、GTK+
工具: Python、PyGTK 和 Glade。
问题:
- 我想编写一个能够显示 PDF 文件的程序。
问题:
- 我需要哪些小部件和 Python 模块?
感谢您的任何建议!
查看 python poppler 绑定。
我以一种简单的肮脏方式呈现 pdf 文件。我复制了示例中用于 python poppler gtk 绑定的方法
def load_pdf(self):
self.doc = poppler.document_new_from_file (uri, None)
# the number of pages in the pdf
self.n_pgs = self.document.get_n_pgs()
# the current page of the pdf
self.curr_pg = 0
# the current page being displayed
self.curr_pg_disp = self.document.get_page(self.curr_pg)
# the scale of the page
self.scale = 1
# the document width and height
self.doc_width, self.doc_height = self.curr_pg_disp.get_size()
def render_pdf(self):
cr = self.pdfda.window.cairo_create()
cr.set_source_rgb(1, 1, 1)
if self.scale != 1:
cr.scale(self.scale, self.scale)
cr.rectangle(0, 0, self.doc_width, self.doc_height)
cr.fill()
self.curr_pg_disp.render(cr)
def on_next_btn_clicked(self, widget, data=None):
if self.curr_pg < self.n_pgs:
self.curr_pg = self.curr_pg + 1
self.curr_pg_disp = self.doc.get_page(self.curr_pg)
self.render_page()
def on_prev_btn_clicked(self, widget, data=None):
if self.curr_pg > 0:
self.curr_pg = self.curr_pg - 1
self.curr_pg_disp = self.doc.get_page(self.curr_pg)
self.render_page()
它不是最好的或最漂亮的,但它确实有效。我仍然必须添加如何使其可滚动或在绘图区域居中以及类似的东西,但有一个开始。
您还可以查看 evince python 绑定,我相信他们有一个小部件,您可以使用它来简化 pdf 渲染。我正在Windows上开发,所以如果有的话我还没有使用它。
不是 GTK,而是 wxPython:
此示例显示了一个 PDF 查看器类,它处理诸如缩放和滚动之类的事情。它需要 python-poppler 和 wxPython >= 2.8.9。