Qt - QTextDocument прерывает перенос слов, если шрифт указан в html - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно преобразовать HTML в pdf с помощью QTextDocument, но, если я укажу шрифт в html (это то, что мне нужно), результат переноса слов прерван.

Чтобы этот код скомпилировался добавить QT + = printsupport в .pro

Пример:

<code>#include <QGuiApplication>
#include <QPrinter>
#include <QTextDocument>

int main(int argc, char *argv[])
{
  QGuiApplication app(argc, argv);

  QPrinter printer(QPrinter::PrinterResolution);
  printer.setPaperSize(QPrinter::A4);
  printer.setOrientation(QPrinter::Portrait);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setOutputFileName("test.pdf");

  QString html;
  html.append("<center><pre style=\"font-size:26pt;font-family:DejaVu Sans Mono\"><br />");
  html.append("<b>Test 1:</b><br />");
  html.append("AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA<br />");
  html.append("<em>--------------------</em><br />");
  html.append("<b>Test 2:</b><br />");
  html.append("BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB<br />");
  html.append("<em>--------------------</em><br />");
  html.append("
"); QTextDocument document; document.setPageSize (printer.pageRect (). Size ()); document.set Html (html); document.print (& printer); return 0;}

В этом случае стиль прерывает перенос слов.

Пример 2:

#include <QGuiApplication>
#include <QPrinter>
#include <QTextDocument>
    
int main(int argc, char *argv[])
{
  QGuiApplication app(argc, argv);

  QPrinter printer(QPrinter::PrinterResolution);
  printer.setPaperSize(QPrinter::A4);
  printer.setOrientation(QPrinter::Portrait);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setOutputFileName("test.pdf");

  QString html;
  html.append("<center><br />");
  html.append("<b>Test 1:</b><br />");
  html.append("AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA<br />");
  html.append("<em>--------------------</em><br />");
  html.append("<b>Test 2:</b><br />");
  html.append("BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB<br />");
  html.append("<em>--------------------</em><br />");
  html.append("</center><br />");

  QTextDocument document;
  document.setPageSize(printer.pageRect().size());
  document.setDefaultFont(QFont("DejaVu Sans Mono", 26));
  document.setHtml(html);

  document.print(&printer);

  return 0;
}

В этом случае он работает отлично.

Я что-то упустил или спецификацию стиля нельзя использовать с переносом слов?

Спасибо.

1 Ответ

1 голос
/ 06 августа 2020

Вам просто нужно добавить следующий текст в поле стиля

:</p>
<pre><code>white-space: pre-wrap
</code>

, например:

<code>
#include <QGuiApplication>
#include <QPrinter>
#include <QTextDocument>

int main(int argc, char *argv[])
{
  QGuiApplication app(argc, argv);

  QPrinter printer(QPrinter::PrinterResolution);
  printer.setPaperSize(QPrinter::A4);
  printer.setOrientation(QPrinter::Portrait);
  printer.setOutputFormat(QPrinter::PdfFormat);
  printer.setOutputFileName("test.pdf");

  QString html;
  html.append("<center><pre style=\"font-size:26pt;font-family:DejaVu Sans Mono;white-space: pre-wrap;\"><br />");
  html.append("<b>Test 1:</b><br />");
  html.append("AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA AAAAA<br />");
  html.append("<em>--------------------</em><br />");
  html.append("<b>Test 2:</b><br />");
  html.append("BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB BBBBB<br />");
  html.append("<em>--------------------</em><br />");
  html.append("
"); QTextDocument document; document.setPageSize (printer.pageRect (). Size ()); document.set Html (html); document.print (& printer); return 0;}
...