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
    #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