Spaces:
Sleeping
Sleeping
| from pdfrw import PdfReader, PdfWriter | |
| from datetime import datetime | |
| def fill_child_fee_pdf( | |
| template_pdf_path, | |
| output_pdf_path, | |
| emp_name, | |
| emp_code, | |
| department, | |
| bill_month, | |
| items, # List of dicts: [{'bill_date': ..., 'description': ..., 'amount': ...}] | |
| total | |
| ): | |
| data_dict = { | |
| 'emp_name': emp_name, | |
| 'emp_code': emp_code, | |
| 'department': department, | |
| 'bill_month': bill_month, | |
| 'total': str(total), | |
| 'current_date': datetime.now().strftime("%d-%b-%Y"), # e.g. "25-May-2025" | |
| } | |
| # Map each row of items to field names | |
| for idx, item in enumerate(items, start=1): | |
| data_dict[f'date_{idx}'] = item.get('bill_date', '') | |
| data_dict[f'description_{idx}'] = item.get('description', '') | |
| data_dict[f'amount_{idx}'] = str(item.get('amount', '')) | |
| # Fill the PDF | |
| template_pdf = PdfReader(template_pdf_path) | |
| for page in template_pdf.pages: | |
| if not hasattr(page, 'Annots') or not page.Annots: | |
| continue | |
| for annotation in page.Annots: | |
| if annotation.T: | |
| key = annotation.T[1:-1] # Remove parentheses | |
| if key in data_dict: | |
| annotation.V = str(data_dict[key]) | |
| annotation.AP = None # Remove old appearance so new value appears | |
| PdfWriter().write(output_pdf_path, template_pdf) | |
| return output_pdf_path | |
| def fill_medical_pdf( | |
| template_pdf_path, | |
| output_pdf_path, | |
| company, | |
| extension_no, | |
| employee_name, | |
| employee_code, | |
| department, | |
| date, | |
| total, | |
| designation, | |
| billing_month, | |
| claims # List of dicts: [{'name': ..., 'relationship': ..., 'category': ..., 'detail': ..., 'amount': ...}] | |
| ): | |
| data_dict = { | |
| 'company': company, | |
| 'extension_no': extension_no, | |
| 'employee_name': employee_name, | |
| 'employee_code': employee_code, | |
| 'department': department, | |
| 'designation': designation, | |
| 'date': date, | |
| 'billing_month': billing_month, | |
| 'total': str(total), | |
| 'current_date': datetime.now().strftime("%d-%b-%Y"), | |
| } | |
| # Map each row of claims to field names | |
| for idx, claim in enumerate(claims, start=1): | |
| data_dict[f'name_{idx}'] = claim.get('name', '') | |
| data_dict[f'relationship_{idx}'] = claim.get('relationship', '') | |
| data_dict[f'category_{idx}'] = claim.get('category', '') | |
| data_dict[f'detail_{idx}'] = claim.get('detail', '') | |
| data_dict[f'amount_{idx}'] = str(claim.get('amount', '')) | |
| # Fill the PDF | |
| template_pdf = PdfReader(template_pdf_path) | |
| for page in template_pdf.pages: | |
| if not hasattr(page, 'Annots') or not page.Annots: | |
| continue | |
| for annotation in page.Annots: | |
| if annotation.T: | |
| key = annotation.T[1:-1] # Remove parentheses | |
| if key in data_dict: | |
| annotation.V = str(data_dict[key]) | |
| annotation.AP = None # Remove old appearance so new value appears | |
| PdfWriter().write(output_pdf_path, template_pdf) | |
| return output_pdf_path | |