[Megoldva]Python - Qt - PDF

Sziasztok,

A kérdés egyszerű: miért nem működik a következő kód?

from reportlab.pdfgen import canvas
from io import BytesIO
from PyQt6.QtCore import QBuffer, QIODevice
from PyQt6.QtPdf import QPdfDocument
from PyQt6.QtPdfWidgets import QPdfView
from PyQt6.QtWidgets import QApplication, QVBoxLayout, QWidget


def create_pdf_in_qbuffer():
    pdf_buffer = BytesIO()
    c = canvas.Canvas(pdf_buffer)
    c.drawString(100, 750, "Hello, ReportLab in QBuffer!")
    c.save()

    pdf_buffer.seek(0)

    # Save for debugging
    with open("debug_output.pdf", "wb") as f:
        f.write(pdf_buffer.getvalue())

    qbuffer = QBuffer()
    qbuffer.open(QIODevice.OpenModeFlag.WriteOnly)
    qbuffer.write(pdf_buffer.read())
    qbuffer.close()
    qbuffer.open(QIODevice.OpenModeFlag.ReadOnly)
    return qbuffer


def create_qpdfdocument_from_qbuffer(qbuffer):
    if qbuffer.size() == 0:
        print("Error: QBuffer is empty.")
        return None

    pdf_document = QPdfDocument(None)
    load_status = pdf_document.load(qbuffer)
    if load_status != QPdfDocument.Status.Ready:
        print("Failed to load PDF document. Status:", load_status)
        return None

    return pdf_document


def main():
    app = QApplication([])

    qbuffer = create_pdf_in_qbuffer()
    pdf_document = create_qpdfdocument_from_qbuffer(qbuffer)
    if pdf_document is None:
        print("Error: Could not create QPdfDocument")
        return

    pdf_view = QPdfView()
    pdf_view.setDocument(pdf_document)

    window = QWidget()
    layout = QVBoxLayout(window)
    layout.addWidget(pdf_view)
    window.setWindowTitle("QPdfDocument from QBuffer (Qt6)")
    window.resize(800, 600)
    window.show()

    app.exec()


if __name__ == "__main__":
    main()

Hozzászólások

Mert valami nem jó benne.

Mármint legalább vmi arról, hogy mi történik?

Közben megtaláltam a hibát...

pdf_view = QPdfView(None)

Hiányzott a "None"...

Habár érdekes, ha itt a return-t nem kommentelem ki akkor nem fut le:

    if load_status != QPdfDocument.Status.Ready:
        print("Failed to load PDF document. Status:", load_status)
        return None

Kösz a segítséget!

Minden hulla a Mount Everesten valamikor egy nagyon motivált ember volt.