Почему QTextBrowser портит мой HTML-код?

Я пытаюсь создать счета-фактуры в формате PDF, поскольку мое требование довольно простое, я подумал об использовании HTML + QTextBrowser. Я написал функции, которые будут создавать HTML-код в соответствии с моими потребностями. Например, если я хочу вставить текст, для этого есть функция, для вставки таблицы также я создал функцию и так далее. Я устанавливаю этот HTML-код в QTextBrowser, используя функцию setHtml(), а затем пытаюсь создать PDF. Проблема в том, что я не получаю то, что ожидаю, проблема не в моем HTML-коде, поскольку я использовал тот же код и видел, что в браузере Chrome все в порядке. Но в тот момент, когда я использую его в функции setHtml, Qt модифицирует html-код, и результат нежелателен. Ниже я публикую свой код с ожидаемыми и полученными изображениями.

void PDF_API::Save(const QString &filePath)
{ 
    QTextDocument document;
    document.setHtml(HTMLCode); // HTMLCode is a QString obj that holds all my html code

    // Creates a copy in html to check the html code. Comment the code if not needed
    QFile file(QDir::currentPath()+"/report.html");
    if(file.open(QFile::WriteOnly))
    {
        file.write(HTMLCode.toStdString().c_str());
        file.close();
    }

    // Printing begins here
    QPrinter printer(QPrinter::PrinterResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setPaperSize(QPrinter::Tabloid);
    printer.setOutputFileName(filePath);
    printer.setPageMargins(QMarginsF(0.1, 0.01, 0.1, 0.1));
    document.print(&printer);
}

Исходный HTML-код, прежде чем я установил его в QTextBrowser

"<html><body><p align=\"center\" style=\"color: #000000; font-family: Times New Roman; font-size: 12pt; line-height: 100%;\">  <b>CENTER </b> </p><hr><p style = \"text-align:left; color: #ff0000; font-family: Times New Roman; font-size: 14pt; line-height: 100%;\"> <b>Left Text</b> <span style = \"float:right; color: #ffff00; font-family: Times New Roman; font-size: 14pt; line-height: 100%;\"> <b>Right Text</b> </span> </p></body></html>"

Модифицированный HTML-код, сгенерированный QTextBrowser

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:100%;\"><span style=\" font-family:'Times New Roman'; font-size:12pt; font-weight:600; color:#000000;\">CENTER </span></p>\n<hr />\n<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:100%;\"><span style=\" font-family:'Times New Roman'; font-size:14pt; font-weight:600; color:#ff0000;\">Left Text</span><span style=\" font-family:'Times New Roman'; font-size:14pt; color:#ff0000;\"> </span><span style=\" font-family:'Times New Roman'; font-size:14pt; font-weight:600; color:#ffff00;\">Right Text</span><span style=\" font-family:'Times New Roman'; font-size:14pt; color:#ffff00;\"> </span></p></body></html>"

Примечание: Приведенный выше HTML-код отображается в консоли отладки, хранившейся в QString.

В браузере Chrome используется оригинальный HTML-код
введите здесь описание изображения

Как показано в QTextBrowser введите здесь описание изображения

Как я могу помешать QTextBrowser испортить мой html-код и получить желаемый результат?

P.S: Это случалось много раз раньше, так как раньше мне требовалось только распечатать PDF-файл, я использовал внешний процесс, называемый процессом wkhtmltopdf, для создания PDF-файла, но теперь в этом сценарии я хочу увидеть результат в приложении. сам.


person Gurushant    schedule 01.10.2018    source источник
comment
QTextBrowser поддерживает только часть HTML и CSS.   -  person Redanium    schedule 01.10.2018


Ответы (1)


QTextBrowser поддерживает только часть HTML и CSS. Для полной поддержки попробуйте использовать QWebView.

person Redanium    schedule 01.10.2018
comment
Да, я проверил это, поскольку я использовал только базовые теги html, такие как span, он должен был поддерживаться. Я не могу использовать QWebView, так как он не встроен в мою среду, и у меня нет времени для создания QWebView. - person Gurushant; 01.10.2018
comment
При дальнейшем исследовании выясняется, что float частично поддерживается Qt, то есть поддерживается только в таблицах и изображениях. - person Gurushant; 01.10.2018