Die einfachste Methode eine Text-Datei drucken zu können, ist ein QTextDocument
-Objekt zu erstellen und dessen print()
-Methode aufzurufen. Diese Methode benötigt ein Printer
-Objekt als Parameter, das wir entweder selbst konfigurieren oder mit einem Dialog verknüpfen können. Über das Printer
-Objekt können wir auch in eine PDF- oder PostScript-Datei „drucken“.
Das folgende Beispiel konvertiert alle im Quellverzeichnis befindlichen HTML-Dateien (*.html, *.htm) in PDF-Dateien und speichert sie im Zielverzeichnis.
// main.cpp #include "ConversionWidget.h" #include <QApplication> int main( int argc, char *argv[] ) { QApplication app( argc, argv ); ConversionWidget widget; widget.show(); return app.exec(); }
// ConversionWidget.h #ifndef CONVERSIONWIDGET_H #define CONVERSIONWIDGET_H #include <QWidget> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLineEdit> #include <QPushButton> #include <QDir> #include <QFile> #include <QFileDialog> #include <QFileInfoList> #include <QTextDocument> #include <QPrinter> #include <QPrintDialog> #include <QMessageBox> class ConversionWidget : public QWidget { Q_OBJECT public: ConversionWidget(); ~ConversionWidget(); private slots: void convertHtmlToPdf(); void chooseDirectory(); private: QLineEdit *m_srcEdit, *m_destEdit; QPushButton *m_srcButton, *m_destButton, *m_convertButton, *m_quitButton; }; #endif // CONVERSIONWIDGET_H
// ConversionWidget.cpp #include "ConversionWidget.h" ConversionWidget::ConversionWidget() { m_srcEdit = new QLineEdit(); m_destEdit = new QLineEdit(); m_srcButton = new QPushButton( "Source" ); m_destButton = new QPushButton( "Destination" ); m_convertButton = new QPushButton( "Convert" ); m_quitButton = new QPushButton( "Quit" ); m_srcEdit->setDisabled( true ); m_destEdit->setDisabled( true ); m_convertButton->setDisabled( true ); connect( m_srcButton, SIGNAL( clicked() ), this, SLOT( chooseDirectory() ) ); connect( m_destButton, SIGNAL( clicked() ), this, SLOT( chooseDirectory() ) ); connect( m_convertButton, SIGNAL( clicked() ), this, SLOT( convertHtmlToPdf() ) ); connect( m_quitButton, SIGNAL( clicked() ), this, SLOT( close() ) ); QVBoxLayout *vLayout = new QVBoxLayout(); QHBoxLayout *hLayout = new QHBoxLayout(); hLayout->addWidget( m_srcEdit ); hLayout->addWidget( m_srcButton ); vLayout->addLayout( hLayout ); hLayout = new QHBoxLayout(); hLayout->addWidget( m_destEdit ); hLayout->addWidget( m_destButton ); vLayout->addLayout( hLayout ); vLayout->addStretch(); hLayout = new QHBoxLayout(); hLayout->addStretch(); hLayout->addWidget( m_convertButton ); hLayout->addWidget( m_quitButton ); vLayout->addLayout( hLayout ); setLayout( vLayout ); resize( 450, 120 ); setWindowTitle( "Html2Pdf" ); } ConversionWidget::~ConversionWidget() { delete m_quitButton; delete m_convertButton; delete m_destButton; delete m_srcButton; delete m_destEdit; delete m_srcEdit; } void ConversionWidget::convertHtmlToPdf() { QStringList htmlFilter; htmlFilter << "*.html" << "*.htm"; QFileInfoList fileList = QDir( m_srcEdit->text() ).entryInfoList( htmlFilter ); QTextDocument document; QPrinter printer; printer.setPaperSize( QPrinter::A4 ); printer.setFullPage( true ); printer.setOrientation( QPrinter::Portrait ); printer.setPrintRange( QPrinter::AllPages ); printer.setOutputFormat( QPrinter::PdfFormat ); foreach( const QFileInfo& fileInfo, fileList ) { QFile file( fileInfo.filePath() ); if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { QMessageBox::critical( NULL, "Error", QString( "Error opening file: %1" ).arg( file.errorString() ), QMessageBox::Ok ); return; } document.setHtml( file.readAll() ); printer.setOutputFileName( m_destEdit->text() + "/" + fileInfo.baseName() + ".pdf" ); document.print( &printer ); } } void ConversionWidget::chooseDirectory() { QString dir = QFileDialog::getExistingDirectory(); if( !dir.isEmpty() ) { if( sender() == m_srcButton ) m_srcEdit->setText( dir ); else if( sender() == m_destButton ) m_destEdit->setText( dir ); if( !m_srcEdit->text().isEmpty() && !m_destEdit->text().isEmpty() ) m_convertButton->setEnabled( true ); } }
doku; Bilder werden nicht angezeigt