Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Expand printed area in a PDF
Qt 6.11 is out! See what's new in the release blog

Expand printed area in a PDF

Scheduled Pinned Locked Moved Unsolved General and Desktop
26 Posts 3 Posters 3.2k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Thomas 63
    wrote on last edited by Thomas 63
    #9

    wow, that really helped a lot!
    PDF looks like this now:
    1e366b52-8e28-4e79-8d6e-2218b11960c6-grafik.png

    What I dont understand now are two things:

    How can I make the logo available for the QTextDocument?
    The logo is visible in the html document:
    3f2274de-bf23-48a3-8750-c85951d45572-grafik.png
    but it still appears as a placeholder in the PDF.

    What do you mean by constructing the document block by block? Should I use multiple html files and print each of them to the document? Like:

        document1.setHtml(html1);
        document1.print(&pdfWriter);
        document2.setHtml(html2);
        document2.print(&pdfWriter);
        document3.setHtml(html3);
        document3.print(&pdfWriter);
    
    

    Thank you so much, I am really stepping forward now.
    Thomas

    artwawA 1 Reply Last reply
    0
    • T Thomas 63

      wow, that really helped a lot!
      PDF looks like this now:
      1e366b52-8e28-4e79-8d6e-2218b11960c6-grafik.png

      What I dont understand now are two things:

      How can I make the logo available for the QTextDocument?
      The logo is visible in the html document:
      3f2274de-bf23-48a3-8750-c85951d45572-grafik.png
      but it still appears as a placeholder in the PDF.

      What do you mean by constructing the document block by block? Should I use multiple html files and print each of them to the document? Like:

          document1.setHtml(html1);
          document1.print(&pdfWriter);
          document2.setHtml(html2);
          document2.print(&pdfWriter);
          document3.setHtml(html3);
          document3.print(&pdfWriter);
      
      

      Thank you so much, I am really stepping forward now.
      Thomas

      artwawA Offline
      artwawA Offline
      artwaw
      wrote on last edited by
      #10

      @Thomas-63 QTextDocument is a container built from QTextBlock parts. Essentially, what you do, is insert one such block - which is rather cumbersome when it comes to manipulating the content (you manipulate it through QTextCursor - it is not that complicated after all, just lots of reading). That's high level theory. Please take a look at https://doc.qt.io/qt-6/qtextcursor.html#insertBlock - the cursor object is your gateway to editing.

      In practice, I think, you need two blocks: first one comes with the logo, second can be as is (assuming you'll take out the logo from html). I shall assume that the logo is the first item in your document, please correct me if that assumption is wrong.
      I have not tested yet but based on my experience what you need to do is:

      • put logo in the resource file, so we know its path (i.e.: ":/img/logo.png" should logo reside under the prefix img)
      • obtain cursor from the very start:
      QTextCursor crs(&document);
      

      Then take a look here https://doc.qt.io/qt-6/qtextcursor.html#insertImage-2 and choose appropriate approach. Experiment with positioning the cursor in the document (by setPostion() method).

      Once the logo is in place, adjust position again and call https://doc.qt.io/qt-6/qtextcursor.html#insertBlock
      Then simply insert the rest of your html.

      Please let me know if you find that troublesome, I can prototype this for you later.

      For more information please re-read.

      Kind Regards,
      Artur

      1 Reply Last reply
      1
      • T Offline
        T Offline
        Thomas 63
        wrote on last edited by
        #11

        Hey Artur
        Thank you so much! Now I am getting closer and closer to what I desired.
        There is only one more issue: It is a two side PDF and I cant find a place to start a new page.

        artwawA 1 Reply Last reply
        0
        • T Offline
          T Offline
          Thomas 63
          wrote on last edited by
          #12

          and one more: the table borders disappear when printing

          1 Reply Last reply
          0
          • T Thomas 63

            Hey Artur
            Thank you so much! Now I am getting closer and closer to what I desired.
            There is only one more issue: It is a two side PDF and I cant find a place to start a new page.

            artwawA Offline
            artwawA Offline
            artwaw
            wrote on last edited by
            #13

            @Thomas-63 said in Expand printed area in a PDF:

            It is a two side PDF and I cant find a place to start a new page.

            It should auto page, I think?
            https://doc.qt.io/qt-6/qtextdocument.html#print

            "If the document is already paginated through a specified height in the pageSize() property it is printed as-is.

            If the document is not paginated, like for example a document used in a QTextEdit, then a temporary copy of the document is created and the copy is broken into multiple pages according to the size of the paint device's paperRect(). By default a 2 cm margin is set around the document contents. In addition the current page number is printed at the bottom of each page."

            @Thomas-63 said in Expand printed area in a PDF:

            the table borders disappear when printing

            All of them? Some of them? Have you tried thicker line? Reasons can be many...

            For more information please re-read.

            Kind Regards,
            Artur

            1 Reply Last reply
            0
            • T Offline
              T Offline
              Thomas 63
              wrote on last edited by Thomas 63
              #14

              I solved the pagination within the html code.

              All of the frames and lines are gone. I even tried 5 px - nothing
              HTML preview in Browser:

              grafik.png

              PDF:

              grafik.png

              Interestingly the background color in cells does work:
              46d8d5e2-b4d2-4924-8f58-e4b7a8c64b1b-grafik.png

              artwawA 1 Reply Last reply
              0
              • T Thomas 63

                I solved the pagination within the html code.

                All of the frames and lines are gone. I even tried 5 px - nothing
                HTML preview in Browser:

                grafik.png

                PDF:

                grafik.png

                Interestingly the background color in cells does work:
                46d8d5e2-b4d2-4924-8f58-e4b7a8c64b1b-grafik.png

                artwawA Offline
                artwawA Offline
                artwaw
                wrote on last edited by
                #15

                @Thomas-63 a bit weird. As you can see above my test had lines in it.
                Can you share the modified html so I can test too? And your current code please. Let's fix it :)

                For more information please re-read.

                Kind Regards,
                Artur

                T 1 Reply Last reply
                0
                • artwawA artwaw

                  @Thomas-63 a bit weird. As you can see above my test had lines in it.
                  Can you share the modified html so I can test too? And your current code please. Let's fix it :)

                  T Offline
                  T Offline
                  Thomas 63
                  wrote on last edited by
                  #16

                  @artwaw how can i upload a file?

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    Thomas 63
                    wrote on last edited by
                    #17

                    HTML:

                    <!DOCTYPE html>
                    <html> 
                    <head>
                    	<meta charset="utf-8">
                    	<meta name="viewport" content="width=device-width, initial-scale=1">
                    	<meta name="generator" content="RocketCake">
                    	<title></title>
                    </head>
                    <body style="background-color:#FFFFFF; padding:0;  margin: 0;">
                    <div style="text-align:left;">
                    <table id="table_798fb160" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:50%; height:30px; background:none; Border: none; table-layout: fixed; ">	<tr>
                    		<td width="100%" height="18px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_d0123cd">
                        <div style="text-align:left;">
                          <span style="font-size:12pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                          </div>
                        </div>
                    		</td>
                    	</tr>
                    </table>
                    <table id="table_4bfff64d" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:100%; height:97px; background:none; border: 2px solid #000000; table-layout: fixed; ">	<tr>
                    		<td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6a5612c4">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Projekt</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_7a1f4a7c">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{projekt}</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_365f079f">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Kundenposition</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_798910f0">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{kundenposition}</span>
                          </div>
                        </div>
                    		</td>
                    	</tr>
                    	<tr>
                    		<td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6fab104c">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Position / Revision</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_3a151bc">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{position} / {revision}</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_63851a2">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Aggregatnummer</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_30174d59">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{aggregatnummer}</span>
                          </div>
                        </div>
                    		</td>
                    	</tr>
                    	<tr>
                    		<td width="27%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_382cbccc">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Datum</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="22%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_276db422">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{datum}</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="24%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_49ec4bae">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Artikelnummer</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="25%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_4c46cf44">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{artikelnummer}</span>
                          </div>
                        </div>
                    		</td>
                    	</tr>
                    	<tr>
                    		<td width="27%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_67c5a5c8">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Bezeichnung</span>
                          </div>
                        </div>
                    		</td>
                    		<td width="22%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6530c995">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                          </div>
                        </div>
                    		</td>
                    		<td width="24%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_f645165">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                          </div>
                        </div>
                    		</td>
                    		<td width="25%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_15ec8179">
                        <div style="text-align:left;">
                          <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                          </div>
                        </div>
                    		</td>
                    	</tr>
                    </table>
                    

                    My Code:

                        QTextDocument document;
                        document.setHtml(html);
                    
                        QString dateiname = QCoreApplication::applicationDirPath() + "/" + ui->db_projekt->text() + "_" + ui->db_pos->text() + "_" + ui->db_rev->text() + get_sprache() + ".pdf";
                        QString filePath = QFileDialog::getSaveFileName(this, tr("PDF Datenblatt speichern"), dateiname, tr("PDF Dateien (*.pdf);;All Files (*)"));
                    
                        QImage img(QCoreApplication::applicationDirPath() + "/Logo.jpg");
                        QImage resizedImg = img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                        document.addResource(QTextDocument::ImageResource, QUrl("Logo.jpg"), QVariant(resizedImg));
                    
                        QTextCursor crs(&document);
                        crs.movePosition(QTextCursor::Start);
                    
                        // Tabellenformat verwenden, um das Bild rechtsbündig zu platzieren
                        QTextTableFormat tableFormat;
                        tableFormat.setAlignment(Qt::AlignRight);
                        tableFormat.setBorder(0);
                        tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
                    
                        QTextCharFormat textformat;
                        textformat.setFontPointSize(16);
                    
                        QTextTable *table = crs.insertTable(1, 2, tableFormat);
                        crs = table->cellAt(0, 0).firstCursorPosition();  // Erste Zelle der ersten Zeile auswählen
                        crs.insertText("Datenblatt " + ui->db_bauart->currentText(), textformat);
                        crs = table->cellAt(0, 1).firstCursorPosition();  // Zweite Zelle der ersten Zeile auswählen
                        QTextImageFormat imageFormat;
                        imageFormat.setName("Logo.jpg");
                        crs.insertImage(imageFormat);
                    
                        QPdfWriter pdfWriter(filePath);
                        pdfWriter.setPageSize(QPageSize(QPageSize::A4));
                        pdfWriter.setPageMargins(QMarginsF(10,10,10,10));
                        document.setPageSize(QPageSize(QPageSize::A4).sizePoints());
                        document.setDocumentMargin(0);
                        document.print(&pdfWriter);
                    
                    
                    artwawA 1 Reply Last reply
                    0
                    • T Thomas 63

                      HTML:

                      <!DOCTYPE html>
                      <html> 
                      <head>
                      	<meta charset="utf-8">
                      	<meta name="viewport" content="width=device-width, initial-scale=1">
                      	<meta name="generator" content="RocketCake">
                      	<title></title>
                      </head>
                      <body style="background-color:#FFFFFF; padding:0;  margin: 0;">
                      <div style="text-align:left;">
                      <table id="table_798fb160" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:50%; height:30px; background:none; Border: none; table-layout: fixed; ">	<tr>
                      		<td width="100%" height="18px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_d0123cd">
                          <div style="text-align:left;">
                            <span style="font-size:12pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                            </div>
                          </div>
                      		</td>
                      	</tr>
                      </table>
                      <table id="table_4bfff64d" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:100%; height:97px; background:none; border: 2px solid #000000; table-layout: fixed; ">	<tr>
                      		<td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6a5612c4">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Projekt</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_7a1f4a7c">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{projekt}</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_365f079f">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Kundenposition</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_798910f0">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{kundenposition}</span>
                            </div>
                          </div>
                      		</td>
                      	</tr>
                      	<tr>
                      		<td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6fab104c">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Position / Revision</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_3a151bc">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{position} / {revision}</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_63851a2">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Aggregatnummer</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_30174d59">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{aggregatnummer}</span>
                            </div>
                          </div>
                      		</td>
                      	</tr>
                      	<tr>
                      		<td width="27%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_382cbccc">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Datum</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="22%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_276db422">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{datum}</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="24%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_49ec4bae">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Artikelnummer</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="25%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_4c46cf44">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{artikelnummer}</span>
                            </div>
                          </div>
                      		</td>
                      	</tr>
                      	<tr>
                      		<td width="27%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_67c5a5c8">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Bezeichnung</span>
                            </div>
                          </div>
                      		</td>
                      		<td width="22%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6530c995">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                            </div>
                          </div>
                      		</td>
                      		<td width="24%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_f645165">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                            </div>
                          </div>
                      		</td>
                      		<td width="25%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_15ec8179">
                          <div style="text-align:left;">
                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                            </div>
                          </div>
                      		</td>
                      	</tr>
                      </table>
                      

                      My Code:

                          QTextDocument document;
                          document.setHtml(html);
                      
                          QString dateiname = QCoreApplication::applicationDirPath() + "/" + ui->db_projekt->text() + "_" + ui->db_pos->text() + "_" + ui->db_rev->text() + get_sprache() + ".pdf";
                          QString filePath = QFileDialog::getSaveFileName(this, tr("PDF Datenblatt speichern"), dateiname, tr("PDF Dateien (*.pdf);;All Files (*)"));
                      
                          QImage img(QCoreApplication::applicationDirPath() + "/Logo.jpg");
                          QImage resizedImg = img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                          document.addResource(QTextDocument::ImageResource, QUrl("Logo.jpg"), QVariant(resizedImg));
                      
                          QTextCursor crs(&document);
                          crs.movePosition(QTextCursor::Start);
                      
                          // Tabellenformat verwenden, um das Bild rechtsbündig zu platzieren
                          QTextTableFormat tableFormat;
                          tableFormat.setAlignment(Qt::AlignRight);
                          tableFormat.setBorder(0);
                          tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
                      
                          QTextCharFormat textformat;
                          textformat.setFontPointSize(16);
                      
                          QTextTable *table = crs.insertTable(1, 2, tableFormat);
                          crs = table->cellAt(0, 0).firstCursorPosition();  // Erste Zelle der ersten Zeile auswählen
                          crs.insertText("Datenblatt " + ui->db_bauart->currentText(), textformat);
                          crs = table->cellAt(0, 1).firstCursorPosition();  // Zweite Zelle der ersten Zeile auswählen
                          QTextImageFormat imageFormat;
                          imageFormat.setName("Logo.jpg");
                          crs.insertImage(imageFormat);
                      
                          QPdfWriter pdfWriter(filePath);
                          pdfWriter.setPageSize(QPageSize(QPageSize::A4));
                          pdfWriter.setPageMargins(QMarginsF(10,10,10,10));
                          document.setPageSize(QPageSize(QPageSize::A4).sizePoints());
                          document.setDocumentMargin(0);
                          document.print(&pdfWriter);
                      
                      
                      artwawA Offline
                      artwawA Offline
                      artwaw
                      wrote on last edited by
                      #18

                      @Thomas-63 Okay, that's an interesting mix of html and QTextDocument structures, not something I attempted.

                      However: tableFormat.setBorder(0); That, obviously, sets border to zero so it can't be visible since it is not there.

                      If you'd like to mix border/no border elements you likely need to separate them. So, I'd assume, new table with new QTextTableFormat. Please verify my reasoning?

                      Another, rather cosmetic thing: below is redundant:

                      QImage resizedImg = img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                      document.addResource(QTextDocument::ImageResource, QUrl("Logo.jpg"), QVariant(resizedImg));
                      

                      You can do just

                      document.addResource(QTextDocument::ImageResource,QUrl("Logo.jpg"),img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                      

                      At any rate, please check that setBorder(0);?

                      For more information please re-read.

                      Kind Regards,
                      Artur

                      T 1 Reply Last reply
                      0
                      • artwawA artwaw

                        @Thomas-63 Okay, that's an interesting mix of html and QTextDocument structures, not something I attempted.

                        However: tableFormat.setBorder(0); That, obviously, sets border to zero so it can't be visible since it is not there.

                        If you'd like to mix border/no border elements you likely need to separate them. So, I'd assume, new table with new QTextTableFormat. Please verify my reasoning?

                        Another, rather cosmetic thing: below is redundant:

                        QImage resizedImg = img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                        document.addResource(QTextDocument::ImageResource, QUrl("Logo.jpg"), QVariant(resizedImg));
                        

                        You can do just

                        document.addResource(QTextDocument::ImageResource,QUrl("Logo.jpg"),img.scaled(QSize(286,56),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
                        

                        At any rate, please check that setBorder(0);?

                        T Offline
                        T Offline
                        Thomas 63
                        wrote on last edited by
                        #19

                        @artwaw Hello and sory fo rot responding so ong - i was on holiday.

                        i modified that redundant line, thanks.

                        That setBorder(0) only removes the border from the top table with the logo:
                        2c8d8703-f5ea-4bcf-8469-ffcf307af633-grafik.png

                        all the othe borders are not affected.

                        artwawA 1 Reply Last reply
                        0
                        • T Thomas 63

                          @artwaw Hello and sory fo rot responding so ong - i was on holiday.

                          i modified that redundant line, thanks.

                          That setBorder(0) only removes the border from the top table with the logo:
                          2c8d8703-f5ea-4bcf-8469-ffcf307af633-grafik.png

                          all the othe borders are not affected.

                          artwawA Offline
                          artwawA Offline
                          artwaw
                          wrote on last edited by
                          #20

                          @Thomas-63 okay, I'll dive in it again. Please bear with me.

                          For more information please re-read.

                          Kind Regards,
                          Artur

                          1 Reply Last reply
                          0
                          • T Offline
                            T Offline
                            Thomas 63
                            wrote on last edited by
                            #21

                            Wow, you are such a big help! Thank you so much.
                            Why do you even spend that much effort with me?

                            artwawA 2 Replies Last reply
                            0
                            • T Thomas 63

                              Wow, you are such a big help! Thank you so much.
                              Why do you even spend that much effort with me?

                              artwawA Offline
                              artwawA Offline
                              artwaw
                              wrote on last edited by artwaw
                              #22

                              @Thomas-63 It's fun? I like solving problems and I like to learn. Crosswords are boring.

                              There is also that little thing: I learned most of what I know about Qt from this very forum (and the manual). So it's only fair to return the favour.

                              For more information please re-read.

                              Kind Regards,
                              Artur

                              1 Reply Last reply
                              1
                              • T Thomas 63

                                Wow, you are such a big help! Thank you so much.
                                Why do you even spend that much effort with me?

                                artwawA Offline
                                artwawA Offline
                                artwaw
                                wrote on last edited by
                                #23

                                @Thomas-63 More to the point - I ran the code you supplied (happy to share my full test sources with you) and for me it looks like this:
                                bf42abe3-9d52-4629-93d5-433cee382481-image.png

                                So now I am puzzled.

                                For more information please re-read.

                                Kind Regards,
                                Artur

                                1 Reply Last reply
                                0
                                • T Offline
                                  T Offline
                                  Thomas 63
                                  wrote on last edited by
                                  #24

                                  wow, thats weird.

                                  1 Reply Last reply
                                  0
                                  • T Offline
                                    T Offline
                                    Thomas 63
                                    wrote on last edited by
                                    #25

                                    please share your code so I can run it on two different pcs

                                    1 Reply Last reply
                                    0
                                    • artwawA Offline
                                      artwawA Offline
                                      artwaw
                                      wrote on last edited by
                                      #26

                                      It's mostly generic.

                                      CMakeLists:

                                      cmake_minimum_required(VERSION 3.5)
                                      
                                      project(qpdWriterTest VERSION 0.1 LANGUAGES CXX)
                                      
                                      set(CMAKE_AUTOUIC ON)
                                      set(CMAKE_AUTOMOC ON)
                                      set(CMAKE_AUTORCC ON)
                                      
                                      set(CMAKE_CXX_STANDARD 17)
                                      set(CMAKE_CXX_STANDARD_REQUIRED ON)
                                      
                                      find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
                                      find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
                                      
                                      set(PROJECT_SOURCES
                                              main.cpp
                                              mainwindow.cpp
                                              mainwindow.h
                                              mainwindow.ui
                                      )
                                      
                                      if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
                                          qt_add_executable(qpdWriterTest
                                              MANUAL_FINALIZATION
                                              ${PROJECT_SOURCES}
                                              res.qrc
                                          )
                                      # Define target properties for Android with Qt 6 as:
                                      #    set_property(TARGET qpdWriterTest APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
                                      #                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
                                      # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
                                      else()
                                          if(ANDROID)
                                              add_library(qpdWriterTest SHARED
                                                  ${PROJECT_SOURCES}
                                              )
                                      # Define properties for Android with Qt 5 after find_package() calls as:
                                      #    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
                                          else()
                                              add_executable(qpdWriterTest
                                                  ${PROJECT_SOURCES}
                                              )
                                          endif()
                                      endif()
                                      
                                      target_link_libraries(qpdWriterTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
                                      
                                      # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
                                      # If you are developing for iOS or macOS you should consider setting an
                                      # explicit, fixed bundle identifier manually though.
                                      if(${QT_VERSION} VERSION_LESS 6.1.0)
                                        set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.qpdWriterTest)
                                      endif()
                                      set_target_properties(qpdWriterTest PROPERTIES
                                          ${BUNDLE_ID_OPTION}
                                          MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
                                          MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
                                          MACOSX_BUNDLE TRUE
                                          WIN32_EXECUTABLE TRUE
                                      )
                                      
                                      include(GNUInstallDirs)
                                      install(TARGETS qpdWriterTest
                                          BUNDLE DESTINATION .
                                          LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                                          RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
                                      )
                                      
                                      if(QT_VERSION_MAJOR EQUAL 6)
                                          qt_finalize_executable(qpdWriterTest)
                                      endif()
                                      

                                      main.cpp

                                      #include "mainwindow.h"
                                      
                                      #include <QApplication>
                                      
                                      int main(int argc, char *argv[])
                                      {
                                          QApplication a(argc, argv);
                                          MainWindow w;
                                          w.show();
                                          return a.exec();
                                      }
                                      

                                      mainwindow.h

                                      #ifndef MAINWINDOW_H
                                      #define MAINWINDOW_H
                                      
                                      #include <QMainWindow>
                                      #include <QTextDocument>
                                      
                                      QT_BEGIN_NAMESPACE
                                      namespace Ui {
                                      class MainWindow;
                                      }
                                      QT_END_NAMESPACE
                                      
                                      class MainWindow : public QMainWindow
                                      {
                                          Q_OBJECT
                                      
                                      public:
                                          MainWindow(QWidget *parent = nullptr);
                                          ~MainWindow();
                                      
                                      private:
                                          Ui::MainWindow *ui;
                                          QTextDocument txt;
                                      
                                      private slots:
                                          void render();
                                      };
                                      #endif // MAINWINDOW_H
                                      

                                      mainwindow.cpp

                                      #include "mainwindow.h"
                                      #include "./ui_mainwindow.h"
                                      
                                      #include <QFile>
                                      #include <QPdfWriter>
                                      #include <QPainter>
                                      #include <QStandardPaths>
                                      #include <QTextCursor>
                                      #include <QTextTable>
                                      
                                      MainWindow::MainWindow(QWidget *parent)
                                          : QMainWindow(parent)
                                          , ui(new Ui::MainWindow)
                                      {
                                          ui->setupUi(this);
                                          QFile f(":/test.html");
                                          f.open(QIODevice::ReadOnly);
                                          txt.setHtml(f.readAll());
                                          f.close();
                                          connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::render);
                                          txt.setPageSize(QPageSize(QPageSize::A4).sizePoints());
                                          txt.setDocumentMargin(0);
                                      }
                                      
                                      MainWindow::~MainWindow()
                                      {
                                          delete ui;
                                      }
                                      
                                      void MainWindow::render() {
                                          QString filePath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
                                          QPdfWriter pdfWriter(filePath+"/test.pdf");
                                      
                                          QImage img(":/Logo.png");
                                          txt.addResource(QTextDocument::ImageResource, QUrl("Logo.png"), img.scaled(QSize(286,56),Qt::KeepAspectRatio, Qt::SmoothTransformation));
                                      
                                          QTextCursor crs(&txt);
                                          crs.movePosition(QTextCursor::Start);
                                      
                                          // Tabellenformat verwenden, um das Bild rechtsbündig zu platzieren
                                          QTextTableFormat tableFormat;
                                          tableFormat.setAlignment(Qt::AlignRight);
                                          tableFormat.setBorder(0);
                                          tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
                                      
                                          QTextCharFormat textformat;
                                          textformat.setFontPointSize(16);
                                      
                                          QTextTable *table = crs.insertTable(1, 2, tableFormat);
                                          crs = table->cellAt(0, 0).firstCursorPosition();  // Erste Zelle der ersten Zeile auswählen
                                          crs.insertText("Datenblatt xxx", textformat);
                                          crs = table->cellAt(0, 1).firstCursorPosition();  // Zweite Zelle der ersten Zeile auswählen
                                          QTextImageFormat imageFormat;
                                          imageFormat.setName("Logo.jpg");
                                          crs.insertImage(imageFormat);
                                          pdfWriter.setPageSize(QPageSize(QPageSize::A4));
                                          pdfWriter.setPageMargins(QMarginsF(10,10,10,10));
                                          txt.setPageSize(QPageSize(QPageSize::A4).sizePoints());
                                          txt.setDocumentMargin(0);
                                          txt.print(&pdfWriter);
                                          txt.print(&pdfWriter);
                                      }
                                      

                                      Mainwindow.ui consists of just a QPushButton named, surprise!, pushButton.

                                      There is also, for convenience, resource file (as you'd probably gather from cmake conf) having a placeholder logo and your html.
                                      res.qrc:

                                      <RCC>
                                          <qresource prefix="/">
                                              <file>test.html</file>
                                              <file>Logo.png</file>
                                          </qresource>
                                      </RCC>
                                      

                                      Copy of your html:

                                      <!DOCTYPE html>
                                      <html>
                                      <head>
                                              <meta charset="utf-8">
                                              <meta name="viewport" content="width=device-width, initial-scale=1">
                                              <meta name="generator" content="RocketCake">
                                              <title></title>
                                      </head>
                                      <body style="background-color:#FFFFFF; padding:0;  margin: 0;">
                                      <div style="text-align:left;">
                                      <table id="table_798fb160" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:50%; height:30px; background:none; Border: none; table-layout: fixed; ">	<tr>
                                                      <td width="100%" height="18px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_d0123cd">
                                          <div style="text-align:left;">
                                            <span style="font-size:12pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                                            </div>
                                          </div>
                                                      </td>
                                              </tr>
                                      </table>
                                      <table id="table_4bfff64d" cellpadding="3" cellspacing="1"  style="box-sizing: border-box; vertical-align: bottom; position:relative; display: inline-table; width:100%; height:97px; background:none; border: 2px solid #000000; table-layout: fixed; ">	<tr>
                                                      <td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6a5612c4">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Projekt</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_7a1f4a7c">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{projekt}</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_365f079f">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Kundenposition</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_798910f0">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{kundenposition}</span>
                                            </div>
                                          </div>
                                                      </td>
                                              </tr>
                                              <tr>
                                                      <td width="27%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6fab104c">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Position / Revision</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="22%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_3a151bc">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{position} / {revision}</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="24%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_63851a2">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Aggregatnummer</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="25%" height="15px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_30174d59">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{aggregatnummer}</span>
                                            </div>
                                          </div>
                                                      </td>
                                              </tr>
                                              <tr>
                                                      <td width="27%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_382cbccc">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Datum</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="22%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_276db422">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{datum}</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="24%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_49ec4bae">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Artikelnummer</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="25%" height="16px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_4c46cf44">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">{artikelnummer}</span>
                                            </div>
                                          </div>
                                                      </td>
                                              </tr>
                                              <tr>
                                                      <td width="27%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_67c5a5c8">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; ">Bezeichnung</span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="22%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_6530c995">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="24%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_f645165">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                                            </div>
                                          </div>
                                                      </td>
                                                      <td width="25%" height="12px" style="vertical-align: top; overflow:hidden; ">  <div style="" id="cell_15ec8179">
                                          <div style="text-align:left;">
                                            <span style="font-size:8pt; font-family:Arial, Helvetica, sans-serif; color:#000000; "> </span>
                                            </div>
                                          </div>
                                                      </td>
                                              </tr>
                                      </table>
                                      

                                      For more information please re-read.

                                      Kind Regards,
                                      Artur

                                      1 Reply Last reply
                                      0

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved