Spaces:
Running
Running
| """ | |
| 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() |