使用pyPdf打开pdf网址

mea*_*ari 6 python pdf pypdf

我如何从url而不是从磁盘打开pdf

就像是

input1 = PdfFileReader(file("http://example.com/a.pdf", "rb"))
Run Code Online (Sandbox Code Playgroud)

我想从网上打开几个文件并下载所有文件的合并.

Joh*_*ohn 14

我想urllib2会得到你想要的东西.

from urllib2 import Request, urlopen
from pyPdf import PdfFileWriter, PdfFileReader
from StringIO import StringIO

url = "http://www.silicontao.com/ProgrammingGuide/other/beejnet.pdf"
writer = PdfFileWriter()

remoteFile = urlopen(Request(url)).read()
memoryFile = StringIO(remoteFile)
pdfFile = PdfFileReader(memoryFile)

for pageNum in xrange(pdfFile.getNumPages()):
        currentPage = pdfFile.getPage(pageNum)
        #currentPage.mergePage(watermark.getPage(0))
        writer.addPage(currentPage)


outputStream = open("output.pdf","wb")
writer.write(outputStream)
outputStream.close()
Run Code Online (Sandbox Code Playgroud)

  • 对于“StringIO”,使用 >> from io import StringIO ## 对于 Python 3 (3认同)
  • 对于 python 3.5 及更高版本,使用 urllib.request 而不是 urllib2 (2认同)

Cha*_*san 8

我认为现在可以通过请求来简化。

import io
import requests
from PyPDF2 import PdfReader
headers = {'User-Agent': 'Mozilla/5.0 (X11; Windows; Windows x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36'}

url = 'https://www.url_of_pdf_file.com/sample.pdf'
response = requests.get(url=url, headers=headers, timeout=120)
on_fly_mem_obj = io.BytesIO(response.content)
pdf_file = PdfReader(on_fly_mem_obj)
Run Code Online (Sandbox Code Playgroud)

  • 现在这是正确的答案。 (2认同)