0
Python3とPopplerを使って、問題なくnew_from_fileでファイルをロードできますが、new_from_dataは問題があります。 new_from_fileは完璧に動作するので、ファイルから読み込んでnew_from_dataを使用するのは意味がないので、ここでコードは明らかに単純なテストですが、ここでpdfファイルを生成する完全なコードを投稿できませんでした。誰かがpythonでpoppler new_from_dataを使用できましたか?
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)なし
- を返していないか、私はエラーを取得することがあります。GLib.Error:のpoppler-クォーク:PDF文書が破損している(4 )
- またはプログラムは、問題は、符号化パラメータとなる可能性がある場合、私は疑問に思う
crashsが、私は結果なしで考えるすべてのものを試してみました。
data1 = "".join(map(data1))
Noの結果: Iは、 "RB" と、その後で文字列にバイト配列を変換してみました。 Googleで
検索は、私は同じ問題に遭遇した実施例
おかげではない、@Trapは、それが正常に動作しませんが、1つのポイントについて:Gio.MemoryInputStreamの.close()を呼び出してメモリを解放しない、どちらもデルを行います。私はPdfページを表示するためにこのコードを使用するので、閲覧される各ページはメモリ使用量を増加させ、ギガバイトで終了する可能性があります。 – Dysmas
それは奇妙なことですが、ドキュメントはclose()の目的に関してかなり明白です。実際には、ドキュメントを正しく理解していれば、ストリームオブジェクトがガベージコレクションされたらストリームのリソースを解放する必要があるため、呼び出す必要はありません。 http://lazka.github.io/pgi-docs/#Gio-2.0/classes/InputStream.html#Gio.InputStream.close – Trap
私はテストコードを新しい質問に投稿しました:https://stackoverflow.com/questions/45838863/gio-memoryinputstream-do-not-free-memory-closed-closed/45869003#45869003。その答えはバグだと説明し、バグに悩まされているnew_from_dataの代わりにnew_from_bytesを使うことを推奨しています。テストされて、それは動作します。 – Dysmas