fixed pdf download
This commit is contained in:
parent
f04d4f8b3e
commit
48ca276241
2 changed files with 35 additions and 16 deletions
|
|
@ -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}'")
|
logger.info(f"API request received to generate PDF: name='{request.name}', link='{request.link}'")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = generate_pdf(request.link, request.name)
|
result = await generate_pdf(request.link, request.name)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
file_path = f"pdfs/{request.name}.pdf"
|
file_path = f"pdfs/{request.name}.pdf"
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,44 @@
|
||||||
from playwright.sync_api import sync_playwright
|
from playwright.async_api import async_playwright
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from pif_compiler.functions.common_log import get_logger
|
from pif_compiler.functions.common_log import get_logger
|
||||||
|
|
||||||
log = get_logger()
|
log = get_logger()
|
||||||
|
|
||||||
def generate_pdf(link : str, name : str):
|
async def generate_pdf(link: str, name: str):
|
||||||
if os.path.exists(f'pdfs/{name}.pdf'):
|
"""
|
||||||
|
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.")
|
log.info(f"PDF already exists for {name}, skipping generation.")
|
||||||
return True
|
return True
|
||||||
else:
|
|
||||||
log.info(f"Generating PDF for {name} from link: {link}")
|
log.info(f"Generating PDF for {name} from link: {link}")
|
||||||
with sync_playwright() as p:
|
|
||||||
browser = p.chromium.launch()
|
try:
|
||||||
page = browser.new_page()
|
async with async_playwright() as p:
|
||||||
page.goto(link)
|
browser = await p.chromium.launch()
|
||||||
page.pdf(path=f'pdfs/{name}.pdf')
|
page = await browser.new_page()
|
||||||
browser.close()
|
await page.goto(link, wait_until='networkidle')
|
||||||
if os.path.exists(f'pdfs/{name}.pdf'):
|
await page.pdf(path=pdf_path)
|
||||||
log.info(f"PDF generated for {name}")
|
await browser.close()
|
||||||
|
|
||||||
|
if os.path.exists(pdf_path):
|
||||||
|
log.info(f"PDF generated successfully for {name}")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
log.error(f"PDF generation failed for {name}")
|
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
|
return False
|
||||||
Loading…
Reference in a new issue