gpt4 book ai didi

python - 有人能够在 python 中使用 poppler new_from_data 吗?

转载 作者:行者123 更新时间:2023-11-30 22:40:57 25 4
gpt4 key购买 nike

使用Python3和Poppler,我可以使用new_from_file加载文件,没有问题,但是new_from_data有问题。这是显然是一个简单测试的代码,因为从文件读取然后使用 new_from_data 没有意义,因为 new_from_file 工作完美,但我无法在此处发布生成 pdf 文件的完整代码。

from gi.repository import Poppler, Gtk

def draw(widget, cr):
# set background.
cr.set_source_rgb(0.7, 0.6, 0.5)
cr.paint()

# set page background
cr.set_source_rgb(1, 1, 1)
cr.rectangle(0,0,800,400)

cr.fill()
page.render(cr)

filepath = "d:/Mes Documents/A5.pdf"
f11 = open(filepath, "r", encoding = "cp850")
data1 = f11.read()
f11.close()

document = Poppler.Document.new_from_data(data1, len(data1), None)
page = document.get_page(0)
print (document.get_n_pages())


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()

可能会发生四种不同的情况:

  • 使用一个非常简单的 pdf(Pdf 引用 13 中的“Hello world”示例),它就可以工作。
  • 对于普通文件,可能不会有错误,但是get_n_pages返回0,而get_page(0)返回None
  • 或者我可能会收到错误:GLib.Error: poppler-quark: PDF 文档已损坏 (4)
  • 或者程序崩溃

我想知道问题是否可能出在编码参数上,但是我尝试了所有我想到的方法,但没有结果。我尝试使用“rb”,然后使用以下命令将字节数组转换为字符串:

data1 = "".join(map(data1))

没有结果。

Google 搜索从未返回有效示例

最佳答案

我遇到了同样的问题,使用 Gio.MemoryInputStream 解决了它。不太优雅,但它确实有效......

from gi.repository import Poppler, Gtk, Gio

def draw(widget, cr):
# set background.
cr.set_source_rgb(0.7, 0.6, 0.5)
cr.paint()

# set page background
cr.set_source_rgb(1, 1, 1)
cr.rectangle(0,0,800,400)

cr.fill()
page.render(cr)

filepath = "d:/Mes Documents/A5.pdf"
with open(filepath, "rb") as f11:
input_stream = Gio.MemoryInputStream.new_from_data(f11.read())
# Take care that you need to call .close() on the Gio.MemoryInputStream once you're done with your pdf document.

document = Poppler.Document.new_from_stream(input_stream, -1, None, None)
page = document.get_page(0)
print (document.get_n_pages())


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()

关于python - 有人能够在 python 中使用 poppler new_from_data 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42735374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com