xxyyy / test_pdf_generation.py
arbabarshad's picture
minimal integrated with llm and pdf
ae6d295
"""
Test script for PDF generation from LaTeX.
This directly tests the PDF generation functionality without using Gradio.
"""
import os
import subprocess
import shutil
# Define paths
TEMPLATE_PATH = os.path.join("templates", "minimal_resume.tex")
OUTPUT_DIR = "outputs"
OUTPUT_TEX_PATH = os.path.join(OUTPUT_DIR, "test_resume.tex")
def add_why_hire_me_section(template_path, output_path):
"""Add a test Why Hire Me section to the resume template."""
# The section needs to be properly placed after \begin{document}
why_hire_me = """\\section*{Why Hire Me}
I am a highly motivated software engineer with extensive experience in web development.
My expertise in Python and JavaScript makes me an ideal candidate for this position.
"""
# Read the template
with open(template_path, "r") as f:
content = f.read()
# Replace the placeholder with the test section
modified_content = content.replace("% WHY_HIRE_ME_SECTION", why_hire_me)
# Write the modified content
with open(output_path, "w") as f:
f.write(modified_content)
return output_path
def convert_to_pdf(tex_path):
"""Convert a LaTeX file to PDF."""
# Get the directory and filename
tex_dir = os.path.dirname(tex_path)
tex_filename = os.path.basename(tex_path)
# Change to the directory containing the tex file
original_dir = os.getcwd()
if tex_dir: # Only change directory if tex_dir is not empty
os.chdir(tex_dir)
try:
# Create a log file to capture output
log_path = "pdflatex_log.txt"
with open(log_path, 'w') as log_file:
# Run pdflatex and capture output to the log file
log_file.write("Running pdflatex - First pass\n")
cmd = ['pdflatex', '-interaction=nonstopmode', tex_filename]
log_file.write(f"Running command: {' '.join(cmd)}\n")
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
log_file.write(f"Return code: {result.returncode}\n")
log_file.write(f"STDOUT:\n{result.stdout}\n")
log_file.write(f"STDERR:\n{result.stderr}\n\n")
# Get the PDF path
pdf_filename = tex_filename.replace('.tex', '.pdf')
# Check if the PDF was actually created (in current directory)
if os.path.exists(pdf_filename):
pdf_path = os.path.abspath(pdf_filename)
print(f"PDF created successfully: {pdf_path}")
return pdf_path
# Check if the PDF was created in the tex_dir
pdf_in_texdir = os.path.join(tex_dir, pdf_filename) if tex_dir else pdf_filename
if os.path.exists(pdf_in_texdir):
pdf_path = os.path.abspath(pdf_in_texdir)
print(f"PDF created successfully: {pdf_path}")
return pdf_path
print(f"PDF file not created. See log at: {os.path.abspath(log_path)}")
return None
except Exception as e:
print(f"Error in PDF conversion: {str(e)}")
return None
finally:
# Change back to the original directory
if tex_dir: # Only change back if we changed in the first place
os.chdir(original_dir)
def main():
"""Main function to test the PDF generation."""
print("Starting PDF generation test...")
print(f"Using template: {os.path.abspath(TEMPLATE_PATH)}")
# Make sure the output directory exists
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Add the Why Hire Me section to the template
modified_tex_path = add_why_hire_me_section(TEMPLATE_PATH, OUTPUT_TEX_PATH)
print(f"Created modified LaTeX file: {os.path.abspath(modified_tex_path)}")
# Convert to PDF
pdf_path = convert_to_pdf(modified_tex_path)
if pdf_path:
print("PDF generation test completed successfully!")
# Copy the PDF to the current directory for easier viewing
shutil.copy(pdf_path, "test_resume.pdf")
print(f"PDF copied to: {os.path.abspath('test_resume.pdf')}")
else:
print("PDF generation test failed.")
if __name__ == "__main__":
main()