smm / src /Report /updated1.py
Sanket17's picture
all files added
2bffcbb
import sys
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from io import BytesIO
def create_overlay_pdf(text, x, y, output_overlay_pdf, page_width, page_height, max_width):
packet = BytesIO()
can = canvas.Canvas(packet, pagesize=(page_width, page_height))
# Set initial font size
font_size = 44 # Larger font size to start with
can.setFont("Helvetica-Bold", font_size)
can.setFillColorRGB(0, 0, 0) # Black text
# Measure the text width
text_width = can.stringWidth(text, "Helvetica-Bold", font_size)
# If the text is too wide, reduce font size to fit within the max_width
if text_width > max_width:
font_size = 18 # Reduce font size if necessary
can.setFont("Helvetica-Bold", font_size)
text_width = can.stringWidth(text, "Helvetica-Bold", font_size)
# Convert page_width to float if it's a Decimal
page_width = float(page_width) # Convert to float to avoid TypeError
# Dynamically calculate the x-coordinate to center the text
x_coordinate = (page_width - text_width) / 2 # Center the text horizontally
# Draw the string at the calculated position
can.drawString(x_coordinate, y, text)
can.save()
packet.seek(0)
with open(output_overlay_pdf, "wb") as overlay_file:
overlay_file.write(packet.getvalue())
def merge_pdfs(input_pdf, overlay_pdf, output_pdf):
reader = PdfReader(input_pdf)
overlay = PdfReader(overlay_pdf)
writer = PdfWriter()
# Apply the overlay to the first page
original_page = reader.pages[0]
original_page.merge_page(overlay.pages[0])
writer.add_page(original_page)
# Add the remaining pages without the overlay
for page_num in range(1, len(reader.pages)):
writer.add_page(reader.pages[page_num])
with open(output_pdf, "wb") as output_file:
writer.write(output_file)
if __name__ == "__main__":
# Retrieve company_name from command-line argument or use default
if len(sys.argv) > 1:
company_name = sys.argv[1]
else:
company_name = "Default_Company"
input_pdf_path = "data/reports/report_stats/1.pdf"
overlay_pdf_path = "src/Report/overlay_test.pdf"
output_pdf_path = "src/Report/1updated.pdf"
# Load the original PDF to get its dimensions
reader = PdfReader(input_pdf_path)
original_page = reader.pages[0]
page_width = original_page.mediabox.width
page_height = original_page.mediabox.height
# Start with conservative coordinates and adjust as needed
x_coordinate = 800 # Adjust as needed
y_coordinate = 600 # Adjust as needed
max_width = 500 # Maximum width for the text
# Step 1: Create the overlay PDF with the same size as the original page
create_overlay_pdf(company_name, x_coordinate, y_coordinate, overlay_pdf_path, page_width, page_height, max_width)
# Step 2: Merge the overlay with the original PDF
merge_pdfs(input_pdf_path, overlay_pdf_path, output_pdf_path)
print(f"Generated PDF saved as {output_pdf_path} with company name: {company_name}")