如何显示已在 python 中下载的 pdf



例如,我从网上抓取了一个pdf

import requests
pdf = requests.get("http://www.scala-lang.org/docu/files/ScalaByExample.pdf")

我想修改此代码以显示它

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

如何修改document =行以使用包含 pdf 的变量 pdf?

(我不介意使用 popplerqt4 或其他任何东西,如果这样可以更容易的话。

这完全取决于您使用的操作系统。这些通常可能会有所帮助:

import os
os.system('my_pdf.pdf')

os.startfile('path_to_pdf.pdf')

import webbrowser
webbrowser.open(r'file:///my_pdf.pdf')

使用临时文件怎么样?

import tempfile
import urllib
import urlparse
import requests
from gi.repository import Poppler, Gtk
pdf = requests.get("http://www.scala-lang.org/docu/files/ScalaByExample.pdf")
with tempfile.NamedTemporaryFile() as pdf_contents:
    pdf_contents.file.write(pdf)
    file_url = urlparse.urljoin(
        'file:', urllib.pathname2url(pdf_contents.name))
    document = Poppler.Document.new_from_file(file_url, None)

试试这个,告诉我它是否有效:

document = Poppler.Document.new_from_data(str(pdf.content),len(repr(pdf.content)),None)

如果您想使用 Acrobat 阅读器打开 pdf,那么下面的代码应该可以工作

import subprocess
process = subprocess.Popen(['<here path to acrobat.exe>', '/A', 'page=1', '<here path to pdf>'], shell=False, stdout=subprocess.PIPE)
process.wait()

由于有一个名为pyPdf的库,您应该能够使用它加载PDF文件。如果您有任何其他问题,请给我发消息。

> 2015 年 8 月:在 Windows 7 中的全新安装中,问题仍然相同:

Poppler.Document.new_from_data(data, len(data), None)

返回 : 类型错误: 必须是字符串而不是字节。

Poppler.Document.new_from_data(str(data), len(data), None)

返回 : PDF 文档已损坏 (4)。

我一直无法使用此功能。

我尝试使用NamedTemporayFile而不是磁盘上的文件,但由于未知原因,它返回了一个未知错误。
所以我正在使用临时文件。不是最漂亮的方法,但它有效。

这是Python 3.4的测试代码,如果有人有想法的话:

from gi.repository import Poppler
import tempfile, urllib
from urllib.parse import urlparse
from urllib.request import urljoin
testfile = "d:/Mes Documents/en cours/PdfBooklet3/tempfiles/preview.pdf"
document = Poppler.Document.new_from_file("file:///" + testfile, None)          # Works fine
page = document.get_page(0)
print(page)         # OK
f1 = open(testfile, "rb")
data1 = f1.read()
f1.close()
data2 = "".join(map(chr, data1))  # converts bytes to string
print(len(data1))
document = Poppler.Document.new_from_data(data2, len(data2),  None)
page = document.get_page(0)                                                     # returns None
print(page)
pdftempfile = tempfile.NamedTemporaryFile()
pdftempfile.write(data1)
file_url = urllib.parse.urljoin('file:', urllib.request.pathname2url(pdftempfile.name))
print( file_url)
pdftempfile.seek(0)
document = Poppler.Document.new_from_file(file_url, None)                       # unknown error

相关内容

  • 没有找到相关文章