| import base64 |
| import os |
| import sys |
| import time |
| from playwright.sync_api import sync_playwright |
| from PIL import Image |
| import pandas as pd |
|
|
| def save_html_file(file_name, html_content): |
| with open(file_name, 'w') as file: |
| file.write(html_content) |
|
|
| def encode_image_to_base64(image_path): |
| with open(image_path, "rb") as image_file: |
| return base64.b64encode(image_file.read()).decode('utf-8') |
|
|
| |
| logo_image_path = r"src/templates_images/Component 3.png" |
| cola_image_path = r"src/templates_images/Frame 52.png" |
| |
| logo_base64 = encode_image_to_base64(logo_image_path) |
| cola_base64 = encode_image_to_base64(cola_image_path) |
| def save_html_file(file_name, html_content): |
| with open(file_name, 'w') as file: |
| file.write(html_content) |
|
|
| def encode_image_to_base64(image_path): |
| try: |
| with open(image_path, "rb") as img_file: |
| return base64.b64encode(img_file.read()).decode("utf-8") |
| except FileNotFoundError: |
| print(f"Image not found: {image_path}") |
| return "" |
| except Exception as e: |
| print(f"Error encoding image {image_path}: {e}") |
| return "" |
| |
| |
| def generate_brand_marketing_html(product_image_base64_1, competitor_image_base64_1, product_image_base64_2, competitor_image_base64_2, donts_html, suggestions_html, company_name): |
| return f""" |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Brand Marketing Template</title> |
| <link href="https://fonts.googleapis.com/css2?family=Inter:wght@600&display=swap" rel="stylesheet"> |
| <style> |
| body {{ |
| font-family: 'Inter', sans-serif; |
| margin: 0; |
| padding: 10%; /* Increased padding by 10% */ |
| background-color: #fff; |
| font-size: 6px; |
| }} |
| @page {{ |
| size: A4; |
| margin: 15px; /* Increased margin to 15px */ |
| }} |
| .header {{ |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| padding: 10px; /* Increased padding to 10px */ |
| background-color: #FFFFFF; |
| margin-bottom: 15px; /* Increased margin between header and content */ |
| }} |
| .header .logo {{ |
| height: 25px; /* Increased logo height */ |
| }} |
| .container {{ |
| display: flex; |
| flex-direction: column; |
| padding: 10px; /* Increased padding to 10px */ |
| flex-grow: 1; |
| }} |
| h1 {{ |
| font-family: 'Times New Roman', serif; |
| font-size: 22px; /* Increased font size */ |
| font-weight: 500; |
| line-height: 1.2; |
| text-align: left; |
| margin-bottom: 15px; /* Increased bottom margin */ |
| }} |
| h2, p {{ |
| font-size: 13px; /* Increased font size */ |
| font-weight: 400; |
| line-height: 1.4; |
| color: #000; |
| }} |
| .gap {{ |
| font-size: 10px; |
| color: rgb(5, 5, 5); |
| font-weight: 100; |
| }} |
| .examples {{ |
| font-size: 12px; /* Increased font size */ |
| color: green; |
| }} |
| .box-container {{ |
| width: 100%; |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| margin-top: 15px; /* Increased margin */ |
| }} |
| .wraper {{ |
| width: 100%; |
| height: 220px; /* Increased height */ |
| display: flex; |
| margin: 10px 0; /* Increased margin */ |
| border-radius: 12px; /* Increased border radius */ |
| overflow: hidden; |
| position: relative; |
| }} |
| .div-1 {{ |
| flex: 1; |
| background-color: #ecbdbd; /* Pink background */ |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| }} |
| .div-2 {{ |
| flex: 1; |
| background-color: #e6f9e6; /* Green background */ |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| }} |
| .wraper img {{ |
| max-width: 90%; |
| max-height: 90%; |
| object-fit: contain; |
| border-radius: 8px; |
| }} |
| .vs-text {{ |
| position: absolute; |
| left: 50%; |
| top: 50%; |
| transform: translate(-50%, -50%); |
| font-size: 18px; /* Increased font size */ |
| font-weight: bold; |
| color: black; |
| }} |
| .side-by-side-container {{ |
| display: flex; |
| gap: 35px; /* Increased gap between boxes */ |
| margin-top: 45px; /* Increased top margin */ |
| }} |
| .pink-box, .green-box {{ |
| flex: 1; |
| padding: 18px; /* Increased padding */ |
| margin-top: 15px; /* Increased margin */ |
| border-radius: 15px; /* Increased border radius */ |
| box-sizing: border-box; |
| height: auto; |
| }} |
| .pink-box {{ |
| background-color: #ecbdbd; |
| color: red; |
| text-align: start; |
| display: flex; |
| flex-direction: column; |
| align-items: flex-start; |
| }} |
| .pink-box h6 {{ |
| font-size: 16px; /* Increased text size */ |
| font-weight: bold; |
| margin: 8px 0; /* Increased margin */ |
| color: red; |
| }} |
| .green-box {{ |
| background-color: #e6f9e6; |
| color: green; |
| text-align: start; |
| display: flex; |
| flex-direction: column; |
| align-items: flex-start; |
| }} |
| .green-box h6 {{ |
| font-size: 16px; /* Increased text size */ |
| font-weight: bold; |
| margin: 8px 0; /* Increased margin */ |
| color: green; |
| }} |
| .case-study {{ |
| font-size: 18px; /* Increased font size */ |
| color: green; |
| margin-top: 25px; /* Increased margin */ |
| }} |
| .container1 {{ |
| font-size: 12px; /* Increased font size */ |
| color: green; |
| margin-top: 15px; /* Increased margin */ |
| }} |
| .case2 {{ |
| font-size: 12px; /* Increased font size */ |
| color: rgb(1, 1, 1); |
| margin-top: 25px; /* Increased margin */ |
| }} |
| .case-study img {{ |
| display: block; |
| max-width: 100%; |
| height: auto; |
| margin-top: 25px; /* Increased margin */ |
| border-radius: 10px; /* Increased border radius */ |
| }} |
| </style> |
| </head> |
| <body> |
| <div class="header"> |
| <h1><span style="color:red;">Brand Marketing</span></h1> |
| <img src="data:image/png;base64,{logo_base64}" alt="Logo" class="logo"> |
| </div> |
| <div class="container"> |
| <p>{company_name} should use Brand Marketing effectively as the strategic promotion for identity, products, and services across all channels to create loyalty among consumers.</p> |
| <p class="gap"><span style="color: red;">Issue/Gap:</span> {company_name}'s current brand marketing efforts might not be reaching their full potential. A comprehensive analysis of brand messaging, target audience engagement across channels, and content strategy could reveal opportunities to optimize {company_name}'s marketing approach for greater reach and impact.</p> |
| </div> |
| <h2 class="examples"> Examples:</h2> |
| <div class="box-container"> |
| <div class="wraper"> |
| <div class="div-1"> <img src="data:image/png;base64,{product_image_base64_1}" alt="Product Image"></div> |
| <div class="vs-text">V/S</div> |
| <div class="div-2"> <img src="data:image/png;base64,{competitor_image_base64_1}" alt="Competitor Image"></div> |
| </div> |
| <div class="wraper"> |
| <div class="div-1"> <img src="data:image/png;base64,{product_image_base64_2}" alt="Product Image"></div> |
| <div class="vs-text">V/S</div> |
| <div class="div-2"> <img src="data:image/png;base64,{competitor_image_base64_2}" alt="Competitor Image"></div> |
| </div> |
| </div> |
| <div class="side-by-side-container"> |
| <div class="pink-box"> |
| <h6>Drawbacks in Current Brand Marketing</h6> |
| <p>{donts_html}</p> |
| </div> |
| <div class="green-box"> |
| <h6>How Banao Technologies Can Help</h6> |
| <p>{suggestions_html}</p> |
| </div> |
| </div> |
| <div class="case-study"> |
| <h3>Case Study:</h3> |
| <div class="container1"> |
| <p><span style="color: green;">Coca-Cola Brand Marketing using its iconic red color?</span></p> |
| </div> |
| <div class="case2"> |
| <p>Coca-Cola uses its iconic red color, Spencerian script font, and "Open Happiness" slogan across all platforms, from its website to its social media pages to its countless physical advertisements.</p> |
| <img src="data:image/png;base64,{cola_base64}" alt="Cola" class="cola"> |
| </div> |
| </div> |
| </body> |
| </html> |
| |
| """ |
|
|
| |
| def parse_cleaned_file_brand_marketing(file_path): |
| with open(file_path, "r") as file: |
| content = file.read() |
|
|
| sections = content.split("==================================================") |
| for section in sections: |
| lines = section.strip().split("\n") |
| if lines and "Brand Marketing" in lines[0]: |
| donts = [] |
| suggestions = [] |
| mode = None |
| for line in lines[1:]: |
| if line.startswith("Don'ts:"): |
| mode = "donts" |
| elif line.startswith("Suggestions:"): |
| mode = "suggestions" |
| elif mode == "donts" and line.startswith("-"): |
| donts.append(line.lstrip("- ")) |
| elif mode == "suggestions" and line.startswith("-"): |
| suggestions.append(line.lstrip("- ")) |
| return "<br>".join(donts), "<br>".join(suggestions) |
|
|
| return "", "" |
|
|
| |
| def process_brand_marketing(data, base_image_dir, output_file, cleaned_file_path, company_name): |
| |
| brand_data = data[data["Category"] == "Brand Marketing"] |
| |
| if brand_data.empty: |
| print("No Brand Marketing data found in the provided Excel file.") |
| return |
|
|
| |
| donts_html, suggestions_html = parse_cleaned_file_brand_marketing(cleaned_file_path) |
|
|
| |
| if len(brand_data) < 2: |
| print("Not enough rows for two product and competitor image comparisons.") |
| return |
|
|
| |
| brand_row_1 = brand_data.iloc[0] |
| brand_row_2 = brand_data.iloc[1] |
|
|
| product_image_path_1 = os.path.join(base_image_dir, brand_row_1["Product_Image_Name"]) |
| competitor_image_path_1 = os.path.join(base_image_dir, brand_row_1["Competitor_Image_Name"]) |
|
|
| product_image_path_2 = os.path.join(base_image_dir, brand_row_2["Product_Image_Name"]) |
| competitor_image_path_2 = os.path.join(base_image_dir, brand_row_2["Competitor_Image_Name"]) |
|
|
| |
| product_image_base64_1 = encode_image_to_base64(product_image_path_1) |
| competitor_image_base64_1 = encode_image_to_base64(competitor_image_path_1) |
|
|
| product_image_base64_2 = encode_image_to_base64(product_image_path_2) |
| competitor_image_base64_2 = encode_image_to_base64(competitor_image_path_2) |
|
|
| |
| html_content = generate_brand_marketing_html( |
| product_image_base64_1, |
| competitor_image_base64_1, |
| product_image_base64_2, |
| competitor_image_base64_2, |
| donts_html, |
| suggestions_html, |
| company_name |
| ) |
|
|
| |
| with open(output_file, "w", encoding="utf-8") as f: |
| f.write(html_content) |
|
|
| print(f"HTML file for Brand Marketing has been saved as: {output_file}") |
|
|
| |
| if __name__ == "__main__": |
| if len(sys.argv) > 1: |
| company_name = sys.argv[1] |
| else: |
| company_name = "Default_Company" |
| |
| file_path = "Output_File/excel/top_3_sd_results.xlsx" |
| data = pd.read_excel(file_path) |
|
|
| base_image_dir = "" |
|
|
| |
| cleaned_file_path = "data/output_generated_file/Product_output_cleaned.txt" |
|
|
| |
| output_file = "src/templates/brand_marketing.html" |
|
|
| |
| process_brand_marketing(data, base_image_dir, output_file, cleaned_file_path, company_name) |
|
|
| |
| sys.stdout.reconfigure(encoding='utf-8') |
|
|
| def capture_screenshot_with_playwright(html_file_path, screenshot_path): |
| """ |
| Capture a full-page screenshot of the HTML file directly using Playwright. |
| """ |
| try: |
| |
| with sync_playwright() as p: |
| browser = p.chromium.launch(headless=True) |
| page = browser.new_page() |
|
|
| |
| page.goto(f"file:///{os.path.abspath(html_file_path)}") |
| |
| |
| page.screenshot(path=screenshot_path, full_page=True) |
| print(f"Screenshot saved: {screenshot_path}") |
|
|
| browser.close() |
|
|
| except Exception as e: |
| print(f"Error capturing screenshot: {e}") |
|
|
| def convert_png_to_pdf(png_path, company_name): |
| """ |
| Convert a PNG image into a PDF strictly named as 'company_name brand marketing.pdf' |
| in the specified folder 'data/reports/template_PDF'. |
| """ |
| try: |
| |
| output_folder = "data/reports/template_PDF" |
| os.makedirs(output_folder, exist_ok=True) |
|
|
| |
| pdf_path = os.path.join(output_folder, "brand marketing.pdf") |
|
|
| |
| img = Image.open(png_path) |
| img.convert('RGB').save(pdf_path, "PDF") |
|
|
| print(f"PDF saved: {pdf_path}") |
| except Exception as e: |
| print(f"Error converting PNG to PDF: {e}") |
|
|
| if __name__ == "__main__": |
| |
| html_file_path = "src/templates/brand_marketing.html" |
| |
| |
| screenshot_folder = "data/reports/template_ss" |
| os.makedirs(screenshot_folder, exist_ok=True) |
| screenshot_path = os.path.join(screenshot_folder, "brand_marketing_screenshot.png") |
|
|
| |
| os.system("playwright install") |
|
|
| |
| capture_screenshot_with_playwright(html_file_path, screenshot_path) |
|
|
| |
| convert_png_to_pdf(screenshot_path, company_name) |