编码的.pdf BLOB到可读的pdf

时间:2019-11-14 17:30:17

标签: python

我在python中运行了一个SQL查询来获取表的内容;一栏是“ HUGEBLOB”数据类型。 我已经将其读入python并有一个包含许多条目/行的列表,如下所示:

dsn = cx_Oracle.makedsn(host, port, sid)  
orcl = cx_Oracle.connect(username+'/'+password+'@'+dsn)
curs = orcl.cursor()
curs.execute(query)
rows = curs.fetchall()
In:  rows[1]
Out: (25129, 10308, '9301020q102SOW.pdf', <cx_Oracle.LOB at 0x1cfb1de4600>)
In:   fp1 = rows[1][3].read()
In:   fp1 
Out:  
b'\xa0\xa0\xa0\xa0\xdd=\x00\x00\xff%PDF-1.4\xff\n1 0 obj\xff\n<<\n/Typ\xffe /Catal\xffog\n/Page\xd7s 2\xf8\xf0R\x10\x03Mo\xfdd\x06\x00UseThu\xffmbs\n>>\ne\xebnd\xfb\xf13\xf8\xfeFon\x7ft\n/Subt\x04\x02~\x03\x011\n/NamL\x01\x9eb\x00BaseO\x01\x07\x00o\xffurier\n/E\xffncoding \x1316\x19\x023\x074>\x0fP\x0fb\x07\xfd2m\x0fr-BoldD\x80\x0f3\x075\x9d\x0f\xaf\x0fb\x073\xcc\x0f\xffr-Obliqu\x81e\xe4\x0f3\x07\x8c\x01\x04\x1f\x16\x1fe\x044\x100\x1f\xde\x03D\x1f\x8b\x0e7h\x1fz\x1fb\x07\xfd5\x97\x19Helvet\'ica\xb6\x1f3\x078\xd3\x1f\xe5\x1fBb\x076\x02/\x14 \xdf\x0f\x8d\x0c94/\x84F/b\x077c/u!\xaf\x1f\x8b\x0e1\x110\x9a/\xac/b\x078\xc9/u%\xdf/\xd0\xf1/\xf7\xff\x15?a\x089\x97\x19Ti\xffmes-Roma\x81nT?\xf8(\x18\x01u?\x87?e\x050\x00\xa1?y/\xf4,=\x0f\xe7?a\tl\n\xad3\rI\x0b\x00ic\x1cO\xf8(\x9c\x0fKO\xc0a\t\xcb\n\x12G|O\xf2.\x00\x15[ \xd9/\xef\xf0\\\x00exv\x00Im:\x13\x00B\x1dTC ]\xfa&g\x15\xf9\t\xff\xf7\xeeE\n/Dif\xbfferenc\x15\x00[\xff 128/.no\xfftdef/quo\xbfteleftnSrwighwTdbltW\xfc\x89P~Semdash\xd7/bu\x8bPtfU\n 4fVgZs\xf3@lbp\x00\x83V\xf8\xd1R\xb7]\xb7\\\n/one\xf7sup}Por/g\xffrave/acu\xffte/circu\xffmflex/ti\xfflde/macr\xbfon/bre\x13`d\xbfotacce\xb3Ad\xd4}\x00\xcbPsfVr\xf3@/c\xbfedillafVh\xffungaruml\xbfaut/og\x04`k\xd7/ca0`\nfVex\xffclamdown^Z`nt/s|PlWb{urZQy/ye2a\xffokenbar/\x9fsecti\x82aEfc\xf7opy~Sordf\xffeminine/{gu^`emottR\xf4\r\x00\x14 lhP/hyp\xbdh\xb1`regi\x9eae\xf9d,dC`egree\xdf/plus\xdf`uso/two\x07fth\x1cp\xfc\x07f\x16cmu/par]a\x10`ph/\tbd?a\xe2\x0cq\nZf\x04i\xda`mas\xe3cu\xa2`\xe4h\xd4dneq\xe7uar|P\x03ahalif5s\x9atsnPes\xc1a\xae\x94a\n/A\x10cA\x16cA\xaa\x1chA\'cAEfAVbAGE/C[d\xec@\x10cE\x16cUE\x1chEEfI\x10cI\x16c\xe5I\x1chIEe\xec@th/UN\'cO\x10cO\x16cO\x1ch\xf9OR\x84Efmulti\xffply\n/Osl\xaa\xa2QU\x10cU\x16cU\x1chU\xfaEfY\x16cThorn\x0f/ger\xb50\x89PJ\x80PqT\x13a\x16ca\x1cha\'caEf\x85aVba\x1a`\xfbv\x1ap\x12ae\xa2\x16ce\x1ch\\`Gdi\x10ci\xaa\x16ci\x1chiC\x87eN\x80n\xaa\'co\x10co\x16co\x1cho|]\x94EfdividS0Uo\x8e\x83u\x10cu\x16cu\x1chUuEfy\x16ct\xc0\x82yC\x86\xf9]\xf7)\xd2\x14 <</C\x1fA 0.0\xf5\x90\\\x03IP\x7fxtGStat\x06\x00;ca\xf2\x95>> \xfb%3/\xe8\x12\x01\x10\x01ZPt\x17\x05Res\xf8z\x00]P\xfe\xf2ProcS\x87et \x08R\x1c\x00s\x02\xff\xf1F31 9Ab\xa12 \x9fAb\xa1\x9b3 ^\xa54 \x8c\x03\xff\x10 \xcc\xd2\x11b\xa16 !\xa1b\xa17 \xcc\x99!b\xa18 \x022b\xa19 `p2b\xa1\x020\xd42\xc7\xa21 8B\xc6\xc7\xa22 \x9eB\x90\x02\x00\xa8<<\x8f /GS\xd8\xa0\x99\xa2\x15\xa0\n\xdf/XObj\xbf` 1\x84\xad\xa3\xed\xa1C\xb2@@`\x16\x00\xb8\xa4M\x9e\\`aBox`P\x0316\x8e\x9e@790-P\xbe\x80.\x00 \xe12\xc3\xa33\x07R\xb2\xfb\xf5Wid3th\xb6\xa0\xcb\x00He\x7fQ\xd9\xa0^b\x00Leng

现在,我正在尝试以人类可读的格式获取pdf。我尝试过:

pdfFile = PdfFileReader(fp1)

并收到此错误:

AttributeError: 'bytes' object has no attribute 'seek'

我在做什么错?另外,我将需要对一堆.doc BLOB执行相同的操作;我假设那里有DocFileReader()吗?

1 个答案:

答案 0 :(得分:0)

PdbFileReader需要一个流作为输入,您可以使用BytesIO将数据包装在类似文件的对象中:

from io import BytesIO

# ... get your data into fp1

pdfFile = PdfFileReader(BytesIO(fp1))