Reputation: 153
I searched a lot for this issue and I ain't found any exact solution for this issue and that's why I'm asking this question...
This is my code for merging two pdf files in python using PyPDF2:
import os
from PyPDF2 import PdfFileReader, PdfFileMerger
files_dir = "/Users/ajayvictor/"
pdf_files = [f for f in os.listdir(files_dir) if f.endswith("pdf")]
merger = PdfFileMerger()
for filename in pdf_files:
merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb"))
merger.write(os.path.join(files_dir, "merged_full.pdf"))
The error occurring which I'm getting while interpreting this code is:
Traceback (most recent call last):
File "newtest.py", line 9, in <module>
merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb"))
File "/Library/Python/2.7/site-packages/PyPDF2/merger.py", line 203, in append
self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
File "/Library/Python/2.7/site-packages/PyPDF2/merger.py", line 151, in merge
outline = pdfr.getOutlines()
File "/Library/Python/2.7/site-packages/PyPDF2/pdf.py", line 1362, in getOutlines
outline = self._buildOutline(node)
File "/Library/Python/2.7/site-packages/PyPDF2/pdf.py", line 1449, in _buildOutline
raise utils.PdfReadError("Unexpected destination %r" % dest)
PyPDF2.utils.PdfReadError: Unexpected destination '/__WKANCHOR_2'
Upvotes: 1
Views: 2025
Reputation: 11
I used a variation of your initial code, but I built the path using pathlib and opened the final pdf file inside a scope.
from PyPDF2 import PdfFileMerger
from pathlib import Path
# prefer to use pathlib to build the path, you can change here
files_dir = (
Path.home()
/ "Documents"
/ "tests"
/ "pdf_files"
)
pdf_files = list(files_dir.glob("*.pdf"))
# optional, just to show that list() didn't sort
## pdf_files.sort()
pdf_merger = PdfFileMerger()
# get the pdf files path
for path in pdf_files:
# just to debug
## print(path.name)
pdf_merger.append(fileobj=str(path))
# create the final pdf
with Path("pdf_merged.pdf").open(mode="wb") as output_file:
pdf_merger.write(output_file)
Upvotes: 1
Reputation: 153
I got an alternative for this..
import pyPdf
filenames=[]
path='/Users/ajayvictor/'
output_filename='merged1.pdf'
for i in range(12153602, 12153604):
j=str(i)
filenames.append(j + '.pdf')
output = pyPdf.PdfFileWriter()
for filename in filenames:
input = pyPdf.PdfFileReader(file(path + filename.strip(), "rb"))
for page in input.pages:
output.addPage(page)
print(filenames)
outputstream = file(output_filename, "wb")
output.write(outputstream)
outputstream.close()
Upvotes: 1