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. I need an alternative way to print Arabic text in qt

I need an alternative way to print Arabic text in qt

Scheduled Pinned Locked Moved General and Desktop
4 Posts 2 Posters 1.8k Views
  • 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.
  • E Offline
    E Offline
    Eng.MG
    wrote on last edited by
    #1

    I'm trying to print html web page that contains Arabic text in Qt. Everything prints fine, but the Arabic text doesn't print properly.

    First i tried this
    @ #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="&lt;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:'Tahoma'; 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\">"
                "&lt;!-- saved from url=(0045)file:///C:/Users/MG/Desktop/Untitled 1.html "
                "--&gt;"
                "&lt;html&gt;&lt;head>&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"&gt;&lt;meta name=\"qrichtext\" content=\"1\">&lt;title&gt;QTextEdit Example&lt;/title&gt;&lt;style "
                "type=\"text/css\">"
                "p, li { white-space: pre-wrap; }"
                "&lt;/style&gt;&lt;/head>&lt;body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-"
                "style:normal;\"";
        r.append(htmlClientName(Name));
        r.append(htmlTable(Table));
        r.append("&lt;/body>&lt;/html&gt;");
        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&#40;&#41; == QDialog::Accepted)
            ui->textEdit->print(&printer);
        delete dlg;
    #endif
    
    }@
    

    The output printed file was like this http://i.imgur.com/ufpoff4.jpg

    I searched for how to solve this problem and ended up with sum bugs in Qt when printing arabic text.And i tried some other Qwidgets like QwebView and QwebPage and ended up with more problems.

    Now i'm asking if there is an alternative way to use Qt printing like Windows API or something else to solve this problem.

    I use SDK : Qt 5.2.1 with Qt Creator 3.0.1 Operating System : Microsoft Windows 8

    Edit:I need to mention that Qt prints arabic text to PDF well.

    Edit:I'm pretty sure that the problem is not the encoding i searched for this problem and i found these bugs in Qt

    https://bugreports.qt-project.org/browse/QTBUG-4452?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel : i think i relate to this one

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Since you have a way to reproduce this reliably, you should consider opening a bug report providing that minimal example.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • E Offline
        E Offline
        Eng.MG
        wrote on last edited by
        #3

        [quote author="SGaist" date="1392497782"]you should consider opening a bug report[/quote]

        I'm planning to do this

        is there any alliterative way? Can i use Windows API or Java scripts to achieve this ?

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          If you can wait, you should try again with 5.3, there's a lot of work currently done to Qt's printing system which might help.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          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