gpt4 book ai didi

c++ - 在 qt 中打印阿拉伯文本的替代方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:13 25 4
gpt4 key购买 nike

我正在尝试在 Qt 中打印包含阿拉伯语文本的 HTML 网页。一切打印正常,但阿拉伯文本打印不正确。

首先我尝试了这个:

#include "mainwindow.h"
#include "ui_mainwindow.
#include <QtPrintSupport/QPrinter>
#include <QString>
#include <QtPrintSupport/QPrintDialog>
#include <QTextDocument>
#include <QFile>
#include <QDir>
#include <QFileDialog>
#include <QTextCodec>
#include <QtWebKitWidgets/QWebPage>
#include <QtWebKitWidgets/QWebView>
#include <QtWebKitWidgets/QWebFrame>


QString htmlItem(QString Item)
{
QString r="";
r.append( "<td>"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:'Tahoma'; font-size:9pt; font-weight:600;\">");
r.append(Item);
r.append("</span></p></td>");
return r;
}

QString htmlRow(QString MFC,QString MFT,QString D,QString N)
{
QString ret ="" ;
ret.append("<tr>");

ret.append(htmlItem(MFC));
ret.append(htmlItem(MFT));
ret.append(htmlItem(D));
ret.append(htmlItem(N));
ret.append("</tr>");
return ret;
}

QString htmlTable(QString rows)
{
QString ret = "";
ret.append("<table border=\"1\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;\" align=\"center\" width=\"90%\" cellspacing=\"0\" cellpadding=\"4\">"
"<tbody>");
ret.append(rows);
ret.append("</tbody></table>");
return ret ;
}
QString htmlClientName(QString name)
{
QString retu="<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\""
"font-family:&#39;Tahoma&#39;; font-size:16pt; font-weight:600;\">";
retu.append(name);
retu.append("</span></p>");
return retu;
}

QString htmlClientPage(QString Table,QString Name)
{
QString r = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">"
"<!-- saved from url=(0045)file:///C:/Users/MG/Desktop/Untitled%201.html "
"-->"
"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta name=\"qrichtext\" content=\"1\"><title>QTextEdit Example</title><style "
"type=\"text/css\">"
"p, li { white-space: pre-wrap; }"
"</style></head><body style=\" font-family:&#39;MS Shell Dlg 2&#39;; font-size:8.25pt; font-weight:400; font-"
"style:normal;\"";
r.append(htmlClientName(Name));
r.append(htmlTable(Table));
r.append("</body></html>");
return r;
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QString cD="";
cD.append(htmlRow("m","n","b","v"));
cD.append(htmlRow("hgfh","n","b","gggg"));
cD.append(htmlRow("m","vvvv","bbbbbbb","v"));
cD.append(htmlRow("m","ssssss","b","sssssssss"));
QString data = htmlClientPage(htmlTable(cD), "???? ???? ");
ui->textEdit->setText(data);


#if !defined(QT_NO_PRINTER) && !defined(QT_NO_PRINTDIALOG)
QPrinter printer(QPrinter::HighResolution);
QPrintDialog *dlg = new QPrintDialog(&printer, this);
if (ui->textEdit->textCursor().hasSelection())
dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);



dlg->setWindowTitle(tr("Print Document"));
if (dlg->exec() == QDialog::Accepted)
ui->textEdit->print(&printer);
delete dlg;
#endif

}

输出的打印文件是这样的:

enter image description here

我搜索了如何解决这个问题,结果在 Qt 打印阿拉伯语文本时遇到了求和错误。我尝试了其他一些 Qwidgets,例如 QwebView 和 QwebPage,但最终遇到了更多问题。

现在我想问是否有其他方法可以使用 Qt 打印(例如 Windows API 或其他)来解决这个问题。

我用
SDK : Qt 5.2.1 与 Qt Creator 3.0.1
操作系统:Microsoft Windows 8

编辑:我需要提一下,Qt 可以很好地将阿拉伯文本打印为 PDF。

编辑:我很确定问题不是编码。我搜索了这个问题,并在 Qt 中发现了这些错误:

https://bugreports.qt-project.org/browse/QTBUG-4452?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel

我认为问题与此有关。

最佳答案

这个:

 QString str = QString::fromLocal8Bit(data.toLocal8Bit());

对我来说没有意义。我不确定它是否有效,但请尝试以下操作:

 ui->textEdit->setText(htmlArabicPage);

然后告诉我发生了什么。

另外,如果你有这个:

 htmlClientPage(htmlTable(cD),"محمد جمال ");

在你的代码中,你应该非常小心。如果你想在 C++11 中创建一个 Unicode 文字,那么你应该这样做:

 u8"محمد جمال "

文本以 UTF-8 编码。

否则,您应该尝试“محمد جمال”是否被正确解释。试试这个:

#include <QString>
#include <QDebug>

int main()
{
qDebug() << QString::fromUtf8("محمد جمال ");
qDebug() << QString::fromLocal8Bit("محمد جمال ");
return 0;
}

您发布的错误来自以前版本的 Qt,它已被关闭。

关于c++ - 在 qt 中打印阿拉伯文本的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789962/

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