Mein FPDF2 PDF ist leer, wenn ich versuche, ihn aus dem Browser herunterzuladen, nachdem ich es an das vordere Ende überPython

Python-Programme
Anonymous
 Mein FPDF2 PDF ist leer, wenn ich versuche, ihn aus dem Browser herunterzuladen, nachdem ich es an das vordere Ende über

Post by Anonymous »

Ich kann nicht für mein Leben von mir herausfinden, warum dieser PDF nicht angezeigt wird. Ich verwende FPDF2, um ein PDF zu erstellen, das gut aussieht, wenn es aus dem Python -Skript speichert. Bei der Übergabe der Daten an das Front-End muss jedoch etwas schief gehen.

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
"
Ich kann überprüfen, ob dies die Daten sind, die heruntergeladen werden, wenn ich den Typ in Text/Ebene ändere. Wenn der Typ auf Anwendung/PDF eingestellt ist, habe ich einen leeren PDF. Ich kann auch erkennen, dass ein Teil davon ordnungsgemäß funktioniert, da das Hinzufügen von mehr Seiten zum PDF zu einem Download mit der richtigen Menge an Seiten führt. Ich speichere das PDF nicht zuerst auf dem Server. Mehr. < /p>
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?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post