Code: Select all
from fpdf import FPDF
from api.packages.utils.jsonLogger import LogFormat, get_or_create_json_logger
logger = get_or_create_json_logger(__name__, log_format=LogFormat.DEFAULT)
def generate_task_pdf(task_data: dict, output_path: str) -> bytearray:
pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", style="B", size=16)
pdf.cell(40, 10, "Hello World!")
logger.info(f"PDF generated and saved to {output_path}")
result = pdf.output()
return result
< /code>
Die PDF-Generation wird über eine Route wie folgt zugegriffen: < /p>
TaskRoutesid.py
class RouteTaskGeneratePDF(customAuthCheckClass):
def get(
self,
request: HttpRequest,
*args,
) -> HttpResponse:
try:
# Replace './test.pdf' with your desired output path or logic
pdf_response = generate_task_pdf({"test": "test"}, "test.pdf")
headers = {"Content-Disposition": "attachment; filename=myfilename.pdf"}
response = HttpResponse(bytes(pdf_response), content_type="application/pdf", headers=headers)
return response
except Exception as e:
# Log the error as needed
return HttpResponse({"error": f"Failed to generate PDF: {str(e)}"}, status=404)
< /code>
Hier ist der Snippet, der für das Drücken der Route verantwortlich ist: < /p>
TaskClientexport async function getTaskPDF(taskId: string, payload: TaskPDFPayload) {
try {
const response = await httpGet(`/task/${taskId}/pdf/`)
return response
} catch (error) {
return await Promise.reject(error)
}
}
< /code>
TaskMaindetails.vue
function generate_pdf() {
const payload = {}
const taskId = props.task?.vertexID || ""
//returns a promise
let pdf_response = TaskClient.getTaskPDF(taskId, payload)
pdf_response.then((message) => {
const blob = new Blob([message.data], { type: "application/pdf" })
let link = document.createElement("a")
link.href = window.URL.createObjectURL(blob)
link.download = "test_pdf_name"
link.click()
})
}
< /code>
Hier ist die PDF-Darstellung, die ich am Ende habe: < /p>
"%PDF-1.3
1 0 obj
>
endobj
2 0 obj
>
endobj
3 0 obj
>
endobj
4 0 obj
>
stream
x�3R��2�35W(�r
Q�w3T04�30PISp
�Z(�[����(hx����+���(j*�d��V
endstream
endobj
5 0 obj
>
endobj
6 0 obj
>
endobj
7 0 obj
>
endobj
xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000096 00000 n
0000000199 00000 n
0000000279 00000 n
0000000422 00000 n
0000000524 00000 n
0000000611 00000 n
trailer
>
startxref
666
%%EOF
"
Einige dieser Ideen stammen aus früheren Beiträgen, aber keiner davon hat den Trick gemacht. und geben Sie eine PDF-Datei aus dem In-Memory-Puffer mit Fastapi zurück?>