Как распечатать PDF-файл в Qt - PullRequest
5 голосов
/ 28 ноября 2011

Я попытался написать код для печати файла PDF с использованием Qt, но почему-то это не работает. Если у кого-то есть идея решить эту проблему, пожалуйста, предоставьте свои советы.

void ChartViewer::onprintBtnClicked(){ 
    String filename = QFileDialog::getOpenFileName(this,"Open File",QString(),"Pdf File(*.pdf)"); 
    qDebug()<<"Print file name is "<<filename; 
    if(!filename.isEmpty()) { 
        if(QFileInfo(filename).suffix().isEmpty()) 
            filename.append(".pdf"); 

        QPrinter printer(QPrinter::HighResolution);         
        printer.setOutputFormat(QPrinter::PdfFormat);  
        printer.setOutputFileName(filename);
        QPrintDialog*dlg = new QPrintDialog(&printer,this); 

        if(textedit->textCursor().hasSelection()) 
            dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection); 

        dlg->setWindowTitle(tr("Print Document")); 

        if(dlg->exec() == QDialog::Accepted) { 
            textedit->print(&printer); 
        } 

        delete dlg; 
    } 
}

1 Ответ

9 голосов
/ 28 ноября 2011

Я не понял вашего вопроса, но теперь я понял.Вы хотите напечатать файл PDF с использованием Qt, вы не хотите печатать в PDF, верно?

Qt не поддерживает загрузку и отображение PDF.Для поддержки PDF в Qt вам понадобится внешняя библиотека poppler.Отметьте эту статью .

Poppler позволяет вам рендерить файлы PDF в QImage, и вы можете легко распечатать QImage следующим образом .

Вот как это сделатьВы печатаете текст в файл PDF.

Я попытался отредактировать ваш код, чтобы я мог немного его протестировать, и он работает для меня, вы можете проверить?Возможно, попытайтесь проверить, возвращает ли QPrinter::isValid() true в вашей среде.

#include <QtGui>
#include <QtCore>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QTextEdit parent;
    parent.setText("We are the world!");
    parent.show();

    QString filename = QFileDialog::getOpenFileName(&parent,"Open File",QString(),"Pdf File(*.pdf)"); 
    qDebug()<<"Print file name is "<<filename; 
    if(!filename.isEmpty()) {
        if(QFileInfo(filename).suffix().isEmpty()) {
            filename.append(".pdf"); 
        }

        QPrinter printer(QPrinter::HighResolution);         
        printer.setOutputFormat(QPrinter::PdfFormat);  
        printer.setOutputFileName(filename);
        QPrintDialog*dlg = new QPrintDialog(&printer,&parent); 
        dlg->setWindowTitle(QObject::tr("Print Document")); 

        if(dlg->exec() == QDialog::Accepted) { 
            parent.print(&printer); 
        } 
        delete dlg; 
    } 
    return app.exec();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...