Skip to content

Instantly share code, notes, and snippets.

@GluTbl
Last active February 3, 2021 15:03
Show Gist options
  • Save GluTbl/259c40e47d03f9887aff4cebeda23a1d to your computer and use it in GitHub Desktop.
Save GluTbl/259c40e47d03f9887aff4cebeda23a1d to your computer and use it in GitHub Desktop.
Pdf Duplex printing split file
#!/usr/bin/python3
import argparse
import os
import sys
from pathlib import Path
from PyPDF2 import PdfFileWriter, PdfFileReader
#/home/v/Downloads/Ancient_merged.pdf
from PyPDF2.pdf import PageObject, NameObject, RectangleObject, NullObject, DictionaryObject
def isfileexist(path:str)->bool:
my_file = Path(path)
if my_file.is_file():
print(f"File \"{path}\" aready exist!!!")
return True
return False
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--pdf_file')
parser.add_argument('-s', '--suffix')
parser.add_argument('-r', '--reverse' ,action='store_true')
parser.add_argument('-m', '--modified' ,action='store_true')
args = parser.parse_args()
###########
suffix=""
if args.suffix is not None:
suffix=args.suffix+"_"
################
if args.pdf_file is None:
print("Please insert pdf file")
sys.exit()
###############
flag_reverse_even=False
if args.reverse:
print("Even page will make reverse...")
flag_reverse_even=True
################
modified_file_storage=None
if args.modified:
modified_file_storage=f"{suffix}{os.path.splitext(args.pdf_file)[0]}_Modified.pdf"
print(f"Soring if filed is modified in \"{modified_file_storage}\"")
odd_file=f"{suffix}{os.path.splitext(args.pdf_file)[0]}_Odd_Print_First.pdf"
even_file=f"{suffix}{os.path.splitext(args.pdf_file)[0]}_Even_Print_Second.pdf"
######exit if file aready exist
if isfileexist(odd_file):
sys.exit()
if isfileexist(even_file):
sys.exit()
##############################
my_file = Path(args.pdf_file)
if not my_file.is_file():
print(f"There is no such file \"{args.pdf_file}\"")
sys.exit()
inputpdf = PdfFileReader(open(args.pdf_file, "rb"))
odd_output = PdfFileWriter()
even_output = PdfFileWriter()
print("Starting job\n")
odd_pages=[]
evenpages=[]
for i in range(inputpdf.numPages):
if i % 2==1:#it is even page
evenpages.append(i)
else:
odd_pages.append(i)
flag_same_page=len(evenpages) == len(odd_pages)
for odd_page in odd_pages:
odd_output.addPage(inputpdf.getPage(odd_page))
if flag_reverse_even:
evenpages.reverse()
if not flag_same_page:
#######create a blank page #########
###########################
blank_page = PageObject.createBlankPage(inputpdf)
#########################################
even_output.addPage(blank_page)
for even_page in evenpages:
even_output.addPage(inputpdf.getPage(even_page))
if not flag_reverse_even and not flag_same_page:
even_output.addBlankPage()
print("\n")
with open(odd_file , "wb") as outputStream:
odd_output.write(outputStream)
with open(even_file , "wb") as outputStream:
even_output.write(outputStream)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment