2017-03-28 6 views
0

예 : "스미스 # 00 $ Consolidated_Performance.pdf"- PDF의 파이썬

는 목표는 파일 이름에 따라 각 PDF의 1 페이지에 책갈피를 추가하는 것입니다.

개별 PDF 파일에 적용 할 때

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) 

UDF를 잘 작동 (예 북마크 이름은 "통합 성능"이 될 것입니다)하지만, 하단의 루프에 넣을 때 책갈피를 추가하지 않습니다 코드. pdfcdir 내의 모든 PDF를 통해 UDF 루프를 만드는 방법에 대한 아이디어가 있습니까?

+0

물론 ... 하나만의 질문입니다. 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에 나타나지 않습니다. 나는 pdf 파일의 pdf 파일을 위해 -> ....를 사용하고있다. merger.append (open (os.path.join (cdir, pdf), 'rb'), import_bookmarks = True) 그런 다음 새로운 pdf에 쓰기. 북마크가 새 PDF에 쓰지 않는 이유는 무엇입니까? – xTHx

+0

당신은 아마도 새로운 질문을해야 할 것입니다. 그래서 모든 사람들이 저보다는 오히려 그것을 봅니다. – kindall

+0

북마크 매개 변수 .append를 적용하여이 문제를 해결할 수있었습니다. – xTHx