2017-03-28 2 views
0

PDFの例:「スミス#00 $ Consolidated_Performance.pdf」- Pythonの

目標は、ファイル名に基づいて、各PDFのページ1にブックマークを追加することです。

(例のブックマーク名は「連結業績」になります)

import os 
from openpyxl import load_workbook 
from PyPDF2 import PdfFileMerger 

cdir = "Directory of PDF" # Current directory 
pdfcdir = [filename for filename in os.listdir(cdir) if filename.endswith(".pdf")] 

def addbookmark(f): 
    output = PdfFileMerger() 
    name = os.path.splitext(os.path.basename(f))[0] # Split filename from .pdf extension 
    dp = name.index("$") + 1 # Find position of $ sign 
    bookmarkname = name[dp:].replace("_", " ") # replace underscores with spaces 
    output.addBookmark(bookmarkname, 0, parent=None) # Add bookmark 
    output.append(open(f, 'rb')) 
    output.write(open(f, 'wb')) 

for f in pdfcdir: 
    addbookmark(f) 

個々のPDFファイルに適用された場合、UDFが正常に動作しますが、の下部にあるループに入れたときに、それは、ブックマークを追加しませんコード。 pdfcdir内のすべてのPDFをUDFループする方法に関するアイデアはありますか?

+0

確かに1つだけの質問です。 UDFとは何ですか? – kindall

+0

@kindall私はそれは[ユーザー定義の関数](https://en.wikipedia.org/wiki/User-defined_function)ですが、正しく使用されていない可能性があります。この質問と関連して、 'output.append(open(f、 'rb'))'と 'output.write(open(f、 'wb'))'はあまり意味がありません。 – roganjosh

+1

ああ。オハイオ州で育った私は、United Dairy Farmersを考えていた。 – kindall

答えて

0

私はあなたが持っている問題はループとは関係がないと確信しています。むしろ、ファイル名だけを渡し、ディレクトリパスは含めません。これは、ファイル名を読み込んだディレクトリではなく、スクリプトの現在の作業ディレクトリ(デフォルトでは、スクリプトがあるディレクトリ)でこれらのファイルを開こうとしています。

したがって、関数を呼び出すときは、各ファイル名にディレクトリ名を結合してください。

for f in pdfcdir: 
    addbookmark(os.path.join(cdir, f)) 
+0

今私は、新しいブックマークでpdfsを追加しようとすると、最終的に結合されたpdfには表示されません。私はPDFfilesのpdfのために - > ....を使用しています:merger.append(open(os.path.join(cdir、pdf)、 'rb')、import_bookmarks = True)、新しいpdfに書き込みます。なぜブックマークが新しいpdfに書き込まれないのでしょうか? – xTHx

+0

あなたはおそらくそれについて新しい質問をするべきです。誰もが私だけでなくそれを見るようにしてください。 – kindall

+0

これを解決するには、ブックマークパラメータ.append – xTHx