2016-12-02 42 views
0

2つのPDFをマージする簡単なスクリプトを作成しようとしていますが、出力をディスクに保存しようとすると問題が発生しました。バイナリモードではありませんへの書き込みをファイル:私のコードは、問題は、私はpypdf2でpdfを書くとエラーが発生する

UserWarningのエラーが出るということです

from PyPDF2 import PdfFileWriter, PdfFileReader 
import tkinter as tk 
from tkinter import filedialog  

### Prompt the user for the 2 files to use via GUI ### 
root = tk.Tk() 
root.update() 
file_path1 = tk.filedialog.askopenfilename(
      filetypes=[("PDF files", "*.pdf")], 
      ) 

file_path2 = tk.filedialog.askopenfilename(
      filetypes=[("PDF files", "*.pdf")], 
      ) 

###Function to combine PDFs### 
output = PdfFileWriter() 

def append_pdf_2_output(file_handler): 
    for page in range(file_handler.numPages): 
     output.addPage(file_handler.getPage(page)) 

#Actually combine the 2 PDFs### 
append_pdf_2_output(PdfFileReader(open(file_path1, "rb"))) 
append_pdf_2_output(PdfFileReader(open(file_path2, "rb"))) 

###Prompt the user for the file save### 
output_name = tk.filedialog.asksaveasfile(
      defaultextension='pdf') 

###Write the output to disk### 
output.write(output_name) 
output.close 

です。正しく書き込まれないことがあります。 [pdf.py:453]トレースバック(最近の最後のコール):output.write(output_name)ファイルの "Combine2Pdfs.py"、行44、 "/Library/Frameworks/Python.framework/Versions/3.5/lib/pytho TypeError:write()の引数はstrでなければなりません( "\ n"); // n3.5/site-packages/P yPDF2/pdf.py "、行487、write stream.write(self。header + b 、バイトではありません。

どこが間違っていますか?

+0

メッセージだけでなく、スタックトレースを投稿できますか? –

+0

コメントにスタックトレースを投稿しないでください。あなたの質問には、質問を編集できる「編集」リンクがあります。 –

答えて

1

tk.filedialog.asksaveasfileの代わりにtk.filedialog.asksaveasfilenameを使用してください。ファイルハンドラ自体ではなく、ファイル名が必要です。

###Prompt the user for the file save### 
output_name = tk.filedialog.asksaveasfilename(defaultextension='pdf') 
+0

これで、「AttributeError: 'str'オブジェクトに属性 '書き込み'がありません」というメッセージが表示されますので、「 」を「保存」としてopen( "output_name"、 'wb')に追加してください。 \t output.write これは何の誤りもなく、pdfも書きません。 – pgcudahy

1

私は、mode = 'wb'をtk.filedialog.asksaveasfileに追加しました。今すぐです

output_name = tk.filedialog.asksaveasfile(
     mode = 'wb', 
     defaultextension='pdf') 
output.write(output_name) 
関連する問題