fixed pdf download

This commit is contained in:
adish-rmr 2025-12-08 11:44:14 +01:00
parent f04d4f8b3e
commit 48ca276241
2 changed files with 35 additions and 16 deletions

View file

@ -56,7 +56,7 @@ async def generate_pdf_endpoint(request: GeneratePdfRequest):
logger.info(f"API request received to generate PDF: name='{request.name}', link='{request.link}'")
try:
result = generate_pdf(request.link, request.name)
result = await generate_pdf(request.link, request.name)
if result:
file_path = f"pdfs/{request.name}.pdf"

View file

@ -1,25 +1,44 @@
from playwright.sync_api import sync_playwright
from playwright.async_api import async_playwright
import os
from pif_compiler.functions.common_log import get_logger
log = get_logger()
def generate_pdf(link : str, name : str):
if os.path.exists(f'pdfs/{name}.pdf'):
async def generate_pdf(link: str, name: str):
"""
Generate a PDF from a web page URL using Playwright.
Args:
link: URL of the page to convert to PDF
name: Name for the generated PDF file (without extension)
Returns:
bool: True if PDF was generated or already exists, False otherwise
"""
pdf_path = f'pdfs/{name}.pdf'
if os.path.exists(pdf_path):
log.info(f"PDF already exists for {name}, skipping generation.")
return True
else:
log.info(f"Generating PDF for {name} from link: {link}")
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto(link)
page.pdf(path=f'pdfs/{name}.pdf')
browser.close()
if os.path.exists(f'pdfs/{name}.pdf'):
log.info(f"PDF generated for {name}")
log.info(f"Generating PDF for {name} from link: {link}")
try:
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(link, wait_until='networkidle')
await page.pdf(path=pdf_path)
await browser.close()
if os.path.exists(pdf_path):
log.info(f"PDF generated successfully for {name}")
return True
else:
log.error(f"PDF generation failed for {name}")
return False
log.error(f"PDF generation failed for {name}: file not found after generation")
return False
except Exception as e:
log.error(f"Error generating PDF for {name}: {str(e)}", exc_info=True)
return False