|
|
import os |
|
|
import PyPDF2 |
|
|
from reportlab.lib.pagesizes import letter |
|
|
from reportlab.pdfgen import canvas |
|
|
from screeninfo import get_monitors |
|
|
import sys |
|
|
import codecs |
|
|
|
|
|
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.buffer) |
|
|
|
|
|
def get_screen_size(): |
|
|
"""Get the primary monitor screen size.""" |
|
|
try: |
|
|
monitor = get_monitors()[0] |
|
|
screen_width = monitor.width |
|
|
screen_height = monitor.height |
|
|
return screen_width, int(screen_height * 1.5) |
|
|
except Exception as e: |
|
|
print(f"Error getting screen size: {e}") |
|
|
return 1000, 1500 |
|
|
|
|
|
def add_padding_to_pdf(input_pdf, output_pdf, padding): |
|
|
"""Add padding to a PDF file.""" |
|
|
try: |
|
|
reader = PyPDF2.PdfReader(input_pdf) |
|
|
writer = PyPDF2.PdfWriter() |
|
|
|
|
|
for page in reader.pages: |
|
|
original_width = page.mediabox.width |
|
|
original_height = page.mediabox.height |
|
|
|
|
|
|
|
|
new_width = original_width + 2 * padding |
|
|
new_height = original_height + 2 * padding |
|
|
|
|
|
|
|
|
packet = canvas.Canvas(output_pdf, pagesize=(new_width, new_height)) |
|
|
packet.translate(padding, padding) |
|
|
packet.save() |
|
|
|
|
|
writer.add_page(page) |
|
|
|
|
|
with open(output_pdf, "wb") as out_file: |
|
|
writer.write(out_file) |
|
|
|
|
|
print(f"β
Padding added: {input_pdf} -> {output_pdf}") |
|
|
|
|
|
except Exception as e: |
|
|
print(f"β οΈ Error adding padding to {input_pdf}: {e}") |
|
|
|
|
|
def merge_pdfs(pdf_list, output_path, elongated_files=[], normalize_size=True): |
|
|
"""Merge multiple PDFs into a single PDF.""" |
|
|
pdf_merger = PyPDF2.PdfMerger() |
|
|
|
|
|
|
|
|
pdf_list = [os.path.abspath(pdf) for pdf in pdf_list] |
|
|
|
|
|
for pdf in pdf_list: |
|
|
if not os.path.exists(pdf): |
|
|
print(f"β οΈ File not found: {pdf}") |
|
|
continue |
|
|
|
|
|
try: |
|
|
if pdf in elongated_files: |
|
|
print(f"π Processing elongated file: {pdf}") |
|
|
|
|
|
pdf_merger.append(pdf) |
|
|
print(f"β
Added: {pdf}") |
|
|
except Exception as e: |
|
|
print(f"β οΈ Could not add {pdf}: {e}") |
|
|
|
|
|
try: |
|
|
pdf_merger.write(output_path) |
|
|
print(f"π Merged PDF saved as: {output_path}") |
|
|
except Exception as e: |
|
|
print(f"Error saving merged PDF: {e}") |
|
|
finally: |
|
|
pdf_merger.close() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
pdf_files = [ |
|
|
"src/Report/1updated.pdf", |
|
|
"data/reports/report_stats/2.pdf", |
|
|
"data/reports/report_stats/3.pdf", |
|
|
"data/reports/report_stats/objective.pdf", |
|
|
"data/reports/template_PDF/brand marketing.pdf", |
|
|
"data/reports/template_PDF/content marketing.pdf", |
|
|
"data/reports/template_PDF/social media marketing.pdf", |
|
|
"data/reports/report_stats/last.pdf" |
|
|
] |
|
|
|
|
|
elongated_pdfs = [ |
|
|
"data/reports/template_PDF/brand marketing.pdf", |
|
|
"data/reports/template_PDF/content marketing.pdf", |
|
|
"data/reports/template_PDF/social media marketing.pdf" |
|
|
] |
|
|
|
|
|
|
|
|
output_dir = "src/Report" |
|
|
os.makedirs(output_dir, exist_ok=True) |
|
|
output_file = os.path.join(output_dir, "report.pdf") |
|
|
|
|
|
|
|
|
merge_pdfs(pdf_files, output_file, elongated_files=elongated_pdfs) |
|
|
|
|
|
|
|
|
|
|
|
|