2017-01-20 3 views
1

pdftotext terminalコマンド(私はUbuntu 17.04を実行しています)を使ってテキストをテキスト(.txt)ファイルにストリッピングした後、ファイルから読み込もうとすると、出力。私はそれに単語が1つ入ったtxtを使ってコードをテストしました:test。コードが機能しました。これはファイルから完全に出力され、pdftotextのフォールトまたはエンコーディングのフォールトのいずれかであることがわかります。本当に私を得て、ここに来らせたのは、ファイルがテキストエディタで正常に開き、すべてのテストでファイルが標準のUTF-8であるということです。ここに私の私のPDF stripped text file、使用して作成されます。PDF変換後に奇妙なファイルが開く

import tkinter 
from tkinter.filedialog import askopenfilename 
import subprocess 
from subprocess import * 
import os 
from tkinter import Listbox 
import sys 
from tkinter import Scrollbar 
from tkinter import Frame 
from tkinter import Label 
from tkinter import messagebox 
from tkinter import Button 

#win32, cygwin, linux, linux2, darwin 

def chooser(): 
    returnedValue['filename'] = askopenfilename(**opts) 
    try: 
     subprocess.run(['pdftotext', returnedValue['filename'], '-raw'], check = True) 
    except (TypeError, subprocess.CalledProcessError) as e: 
     messagebox.showerror("Null error", "No file selected") 
    if sys.platform == "linux" or sys.platform == "linux2" or sys.platform == "darwin": 
     label = returnedValue['filename'].split('/') 
     file2['file2'] = label[len(label)-1] 
    else: 
     label = returnedValue['filename'].split('\\') 
     file2['file2'] = label[len(label)-1] 

    L.insert(0, label[len(label)-1]) 

def trello(): 
    with open(returnedValue['filename'], 'r', encoding='utf8', errors='ignore') as f: 
     content = f.readlines() 
    content = [x.strip() for x in content] 
    for line in content: 
     print(line) 


opts = {} 
opts['filetypes'] = [('Portable Document Format','.pdf'),('all files','.*')] 
opts['defaultextension'] = '.pdf' 
opts['title'] = 'Select File' 
opts['initialdir'] = [os.path.expanduser('~/')] 

returnedValue = {} 
returnedValue['filename'] = "" 
file2 = {} 
file2['file2'] = "" 
root = tkinter.Tk() 

B = Button(root, text = "Convert PDF", command = chooser) 
B.pack() 

F = Frame(root) 

La = Label(F, text="PDFs Converted:") 
La.pack() 

S = Scrollbar(F) 
S.pack(side=tkinter.RIGHT, fill=tkinter.Y) 

L = Listbox(F, height=5, yscrollcommand=S.set) 
L.pack() 

S.config(command=L.yview) 

F.pack() 

Bue = Button(root, text="Send to Trello", command = trello) 
Bue.pack() 

root.geometry('{}x{}'.format(500, 500)) 
root.attributes("-topmost", True) 
root.wm_title("PDF Chooser") 
root.mainloop() 

これは私がopen()機能でerrors='ignore'を使用していないときに私が取得エラーです:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/lib/python3.6/tkinter/__init__.py", line 1702, in __call__ 
    return self.func(*args) 
    File "./pdftotextCVM.py", line 34, in trello 
    content = f.readlines() 
    File "/usr/lib/python3.6/codecs.py", line 321, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 11:  invalid start byte 

そしてhereは私が行うとき私が得るものですerrors=ignoreを使用してください。その最後のペーストは、私のUbuntu端末の履歴が戻ってくるほどです。もっと多くの情報があるかもしれませんが、あなたはそのアイデアを得ることができます。サイドノート:わからない場合は、Python 3.6を使用しています。

+1

実際のファイルの内容を確認するには、16進ダンプユーティリティを使用します。 –

+0

コメントありがとうございました。あなたは私に道を譲り、答えを見つけました。 – Steampunkery

+0

あなたのコードに外部リンクを使用しないでください。あなたのポストの中に - 好ましくは[mcve]としてコピーしてください。私は先に進み、あなたのためにそれをしました(実際の問​​題に限定されず、コピーしています)。私はサンプル出力をダウンロードして含めることができませんでした。あなたは自分でそうする必要があります。 – usr2564301

答えて

1

errors=ignore出力から、バイナリジャンク過ぎて、スクロールダウン、私は以下を参照してください。

22 0 obj 
<< 
/Type /Font 
/Subtype /Type0 
/BaseFont /OXSVSB+TimesNewRoman/Encoding /Identity-H 
/ToUnicode 23 0 R 
/DescendantFonts[ 24 0 R ] 
>> 

ものは、PDF命令です。入力.pdfのように見えます。ファイルは開かれていますが、出力は.txtではありません。

機能を拡張するには、ファイルを開く前に、.pdfから.txtに変更する必要があります。

+0

ありがとう、良い先生! – Steampunkery

関連する問題