gpt4 book ai didi

css - QTextDocument 中的自定义字体

转载 作者:行者123 更新时间:2023-11-28 15:11:29 28 4
gpt4 key购买 nike

我正在尝试从 QTextDocument 生成一个 PDF 文件,工作正常。当我只想为特定的 <p></p> 使用自定义字体时,问题就来了目的。我尝试使用 QFontDatabase::addApplicationFont() 的标准方法它成功地将字体加载到应用程序中,但由于某种原因,它写入了所有 QString添加到 messageBody 的基于变量使用此字体而不是 QTextFocument.setDefaultFont() 指定的字体,甚至通过 style={font-family:} 手动.

我是不是做错了,或者忽略了这里的某些东西,或者这是某种错误?

main.cpp

#include <QApplication>
#include <QPrinter>
#include <QTextDocument>
#include <QFontDatabase>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication a(argc,argv);

int id = QFontDatabase::addApplicationFont(":/BarcodeAV.ttf");
qDebug()<< "font"<< QFontDatabase::applicationFontFamilies(id)[0];
QString serialNumber = "ABC123";
QString messageBody;
messageBody += "<p style='font-size: large;'><b>Serial Number:</b> " + serialNumber + "</p>";
messageBody += "<p style='font-size: large; font-family=\"Console\"'><b>Serial Number:</b> " + serialNumber + "</p></p>";

QTextDocument document;
document.setHtml(messageBody);

QPrinter printer(QPrinter::PrinterResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");

document.print(&printer);

return 0;
}


输出 PDF 如下所示:

enter image description here

我无法理解为什么/如何将基本 QString (messageBody) 与连接到其中的那些 (serialNumber) 区分开来?


编辑::尝试实现下面建议的 style.css 解决方案后输出没有变化

main.cpp

#include <QApplication>
#include <QPrinter>
#include <QTextDocument>
#include <QFontDatabase>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication a(argc,argv);

int id = QFontDatabase::addApplicationFont(":/BarcodeAV.ttf");
qDebug()<< "font"<< QFontDatabase::applicationFontFamilies(id)[0];
QString serialNumber = "ABC123";
QString messageBody;
messageBody += "<p style='font-size: large;'><b>Serial Number:</b> " + serialNumber + "</p>";
messageBody += "<p style='font-size: large;'><b>Serial Number:</b> <span id=\"barcode\">" + serialNumber + "</span></p>";

QTextDocument document;
QFile file(":/style.css");
if(file.open(QFile::ReadOnly|QFile::Text)){
qDebug() << "Opened CSS";
}
else{
qDebug() << "Failed to open CSS:" << file.errorString();
}
document.setDefaultStyleSheet(file.readAll());
document.setHtml(messageBody);

QPrinter printer(QPrinter::PrinterResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");

document.print(&printer);

return 0;
}

样式.css

@font-face {
font-family: K-O-D-E-39 Hidden;
src: url(':/BarcodeAV.ttf');
}

#barcode{
font-family: 'K-O-D-E-39 Hidden';
font-size: larger;
}

最佳答案

为了能够以非常简单的方式为每个标签添加属性,建议创建一个.css 文件,在这个文件中我们将使用@font-face 通过 url 加载源,在本例中我的源是 KODE-39 Hidden 文件是 barcode.ttf:

@font-face {
font-family: K-O-D-E-39 Hidden;
src: url('qrc:/barcode.ttf');
}
#barcode{
font-family: 'K-O-D-E-39 Hidden';
font-size: larger;
}

然后通过addApplicationFont()添加字体,我们通过idbarcode建立。还必须通过 QTextDocument 的 setTefaultStyleSheet 方法添加 css:

int main(int argc, char *argv[])
{
QApplication a(argc,argv);

int id = QFontDatabase::addApplicationFont(":/barcode.ttf");
qDebug()<< "font"<< QFontDatabase::applicationFontFamilies(id)[0];
QString serialNumber = "ABC123";
QString messageBody;
messageBody += "<p style='font-size: large;'><b>Serial Number:</b> " + serialNumber + "</p>";
messageBody += "<p style='font-size: large;'><b>Serial Number:</b> <span id=\"barcode\">" + serialNumber + "</span></p>";

QTextDocument document;
QFile file(":/style.css");
file.open(QFile::ReadOnly|QFile::Text);
document.setDefaultStyleSheet(file.readAll());
document.setHtml(messageBody);

QPrinter printer(QPrinter::PrinterResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("test.pdf");

document.print(&printer);

return 0;
}

输出:

enter image description here

完整的例子可以在下面的link中找到.

关于css - QTextDocument 中的自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48306251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com