このpythonコマンドラインユーティリティを変換して、既存のプログラムでコードをモジュールとして使用できるようにし、MongoEngineを使用してMongoDBに保存されているpdfをフィードできるようにしています。
現在、ファイル名を文字列として受け取り、次のコードを使用してファイルを取得します。
fp = file(fname, 'rb')
mongoDB からドキュメントを挿入したいので、関数の引数を に変更しmain(fp)
、インタラクティブな Python インタープリターから次のことを行いました。
>>> from app.documents import UserDocument
>>> from app.pdfutils2 import main
>>> doc = UserDocument.objects.first()
>>> main(doc._file.read())
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "app/pdfutils2.py", line 107, in main
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True):
File "/Library/Python/2.7/site-packages/pdfminer/pdfpage.py", line 118, in get_pages
parser = PDFParser(fp)
File "/Library/Python/2.7/site-packages/pdfminer/pdfparser.py", line 43, in __init__
PSStackParser.__init__(self, fp)
File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 495, in __init__
PSBaseParser.__init__(self, fp)
File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 166, in __init__
self.seek(0)
File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 507, in seek
PSBaseParser.seek(self, pos)
File "/Library/Python/2.7/site-packages/pdfminer/psparser.py", line 196, in seek
self.fp.seek(pos)
AttributeError: 'str' object has no attribute 'seek'
fp
は最初に'rb'
フラグを使用して作成されるため、mongoengine からバイナリ モードで作成する必要があると思いますが、 FileFieldfp
の GridFS 結果をバイナリ モードに変換する方法がわかりません。
GridFS の結果をバイナリに変換して、 を使用して取得したときと同じにする方法についてのヒントはありfile(fname, 'rb')
ますか? すべてのヒントは大歓迎です!