使用 Python 3.7 在 SharePoint 页面上阅读 PDF 时出错
Error while reading PDF on SharePoint page using Python 3.7
我正在使用 "PyPDF2"、"urllib.request"、"io" 和 "requests_ntlm"+"HttpNtlmAuth" 访问公司的 SharePoint 2010 页面并阅读和打印作为字符串的 PDF。
我已经成功地在 PDF 文件和在线 PDF 上阅读和打印 PDF,但 SharePoint 2010 似乎无法正常工作。
这是我的代码:
import urllib.request
import requests
import io
import PyPDF2 as p2
from requests_ntlm import HttpNtlmAuth
url = "http://company.net/sites/folder1/folder2/folder3/folder4/sample.pdf"
response = requests.get(url, auth=HttpNtlmAuth("USER@MAIL.COM","PASSWORD"))
print(response.status_code)
print(response.content)
open = urllib.request.urlopen(response.content).read()
PDFfile = io.BytesIO(open)
pdfread = p2.PdfFileReader(PDFfile)
NrPages = pdfread.getNumPages()
for i in range(NrPages):
x = pdfread.getPage(i)
y = str(x.extractText())
print(y)
关于 "status_code",我收到了 HTTP 200 代码,因此我认为访问已被接受。
打印 "response.content" 时,我得到这样的信息:
b'%PDF-1.3\r%\xff\xff\xff\xff\r1 0 obj\r<<\r/Title (\xfe\xff\x00D\x00S\x00-\x00T\x00B\x00L\x00-\x00M\x00A\x00X\x00-\x00D\x00P\x00L\x00S\x00-\x00S\x00C\x00-\x001\x004\x000\x000\x000\x00-\x001\x001\x004\x000\x000\x00-\x001\x001\x000\x00 \x00k\x00s\x00i\x00-\x00M\x00i\x00n\x00.\x00 \x00W\x00T\x00 \x009\x000\x00%\x00-\x00\(\x00U\x00S\x00C\x00 \x00U\x00n\x00i\x00t\x00s\x00\)\x00.\x00x\x00l\x00s\x00m)\r/Producer (Amyuni PDF Converter version 4.5.2.7)\r/CreationDate (D:20140624164324-03\'00\')\r>>\rendobj\r7 0 obj\n<< /Length 8 0 R /Filter /FlateDecode >>\nstream\nx\x9c\xb5Z[s\x9bH\x16~O\x95\xffC\xbfL\x8d\xb3\x15a\xfaB\xd3\xbc\xad/J\xc6\x93\xf82\x96\xbc\xaeT\xf9\x85H\xc8f#!\x05\xe1M\xfc\xa7\xb6\xf6\'\xee9M\x03\x8d\xa0\x91\xb23[S\xe3H\xa2\xf9\xf8\xce\xfd\x9cn\xbe\x1dQ\xe2\xc3\x7f\x94P\xe9E\x0c>\xcdVG\xd9\x11\xfe\xe4{\xd2g$\x7f:\x12\xa1\'\x05\tT\xe0\x85\x8c\x88Px\x94\x91\x11\xe5\x9eT$O\x8e\x16\x7f\xc3\xf5\x9e\x88$\xa9\xfe*\x9fZ\xf7\x85\xcc\xa3\xd2q\x1f%\xf5\xb2@y
等等,等等……我认为这是合乎逻辑的。
但是当 运行 其余代码(urllib.request.urlopen + PDF 阅读)时,我得到以下信息:
AttributeError: 'bytes' object has no attribute 'timeout'
你们认为这里缺少什么?读取文件时可能缺少一些解码。真的需要一些帮助。
谢谢!
urllib.request.urlopen方法只接受url或请求对象。它无法将字节传递给此方法。
您可以尝试以下代码:
import urllib.request
import requests
import io
import PyPDF2 as p2
from requests_ntlm import HttpNtlmAuth
url = "http://sp10/Shared%20Documents/test.pdf"
response = requests.get(url, auth=HttpNtlmAuth("CONTOSO\Administrator","password"))
print(response.status_code)
PDFfile = io.BytesIO(response.content)
pdfread = p2.PdfFileReader(PDFfile)
NrPages = pdfread.getNumPages()
for i in range(NrPages):
x = pdfread.getPage(i)
y = str(x.extractText())
print(y)
我正在使用 "PyPDF2"、"urllib.request"、"io" 和 "requests_ntlm"+"HttpNtlmAuth" 访问公司的 SharePoint 2010 页面并阅读和打印作为字符串的 PDF。
我已经成功地在 PDF 文件和在线 PDF 上阅读和打印 PDF,但 SharePoint 2010 似乎无法正常工作。
这是我的代码:
import urllib.request
import requests
import io
import PyPDF2 as p2
from requests_ntlm import HttpNtlmAuth
url = "http://company.net/sites/folder1/folder2/folder3/folder4/sample.pdf"
response = requests.get(url, auth=HttpNtlmAuth("USER@MAIL.COM","PASSWORD"))
print(response.status_code)
print(response.content)
open = urllib.request.urlopen(response.content).read()
PDFfile = io.BytesIO(open)
pdfread = p2.PdfFileReader(PDFfile)
NrPages = pdfread.getNumPages()
for i in range(NrPages):
x = pdfread.getPage(i)
y = str(x.extractText())
print(y)
关于 "status_code",我收到了 HTTP 200 代码,因此我认为访问已被接受。 打印 "response.content" 时,我得到这样的信息:
b'%PDF-1.3\r%\xff\xff\xff\xff\r1 0 obj\r<<\r/Title (\xfe\xff\x00D\x00S\x00-\x00T\x00B\x00L\x00-\x00M\x00A\x00X\x00-\x00D\x00P\x00L\x00S\x00-\x00S\x00C\x00-\x001\x004\x000\x000\x000\x00-\x001\x001\x004\x000\x000\x00-\x001\x001\x000\x00 \x00k\x00s\x00i\x00-\x00M\x00i\x00n\x00.\x00 \x00W\x00T\x00 \x009\x000\x00%\x00-\x00\(\x00U\x00S\x00C\x00 \x00U\x00n\x00i\x00t\x00s\x00\)\x00.\x00x\x00l\x00s\x00m)\r/Producer (Amyuni PDF Converter version 4.5.2.7)\r/CreationDate (D:20140624164324-03\'00\')\r>>\rendobj\r7 0 obj\n<< /Length 8 0 R /Filter /FlateDecode >>\nstream\nx\x9c\xb5Z[s\x9bH\x16~O\x95\xffC\xbfL\x8d\xb3\x15a\xfaB\xd3\xbc\xad/J\xc6\x93\xf82\x96\xbc\xaeT\xf9\x85H\xc8f#!\x05\xe1M\xfc\xa7\xb6\xf6\'\xee9M\x03\x8d\xa0\x91\xb23[S\xe3H\xa2\xf9\xf8\xce\xfd\x9cn\xbe\x1dQ\xe2\xc3\x7f\x94P\xe9E\x0c>\xcdVG\xd9\x11\xfe\xe4{\xd2g$\x7f:\x12\xa1\'\x05\tT\xe0\x85\x8c\x88Px\x94\x91\x11\xe5\x9eT$O\x8e\x16\x7f\xc3\xf5\x9e\x88$\xa9\xfe*\x9fZ\xf7\x85\xcc\xa3\xd2q\x1f%\xf5\xb2@y
等等,等等……我认为这是合乎逻辑的。
但是当 运行 其余代码(urllib.request.urlopen + PDF 阅读)时,我得到以下信息:
AttributeError: 'bytes' object has no attribute 'timeout'
你们认为这里缺少什么?读取文件时可能缺少一些解码。真的需要一些帮助。
谢谢!
urllib.request.urlopen方法只接受url或请求对象。它无法将字节传递给此方法。
您可以尝试以下代码:
import urllib.request
import requests
import io
import PyPDF2 as p2
from requests_ntlm import HttpNtlmAuth
url = "http://sp10/Shared%20Documents/test.pdf"
response = requests.get(url, auth=HttpNtlmAuth("CONTOSO\Administrator","password"))
print(response.status_code)
PDFfile = io.BytesIO(response.content)
pdfread = p2.PdfFileReader(PDFfile)
NrPages = pdfread.getNumPages()
for i in range(NrPages):
x = pdfread.getPage(i)
y = str(x.extractText())
print(y)