2017-05-04 14 views
2

私は期待通りのコードスニペットを見つけましたが、PDFファイルが開いていて、PDFリーダーからPDFファイルを他のプリンタで印刷すると問題が発生します。 PDFリーダーを使用してアプリケーションからPDFファイルを再度印刷すると、PDFファイルを印刷するために設定したプリンタではなく、PDFリーダーで設定されたプリンタで印刷されます。QtからPDFファイルを印刷

例:アプリケーションで

  1. 私は、PDFファイルを印刷するようPrinter_1を設定します。
  2. ファイルを印刷します(PDFリーダーでファイルを開き、Printer_1プリンタで印刷します)。
  3. PDFリーダーではCTRL + Pに行き、そこでPrinter_2を選択して印刷をクリックします。
  4. PDFリーダーを閉じずにもう一度アプリケーション(プリンタがPrinter_1に選択されています)でPDFファイルを印刷します。これで、printer_1の代わりにPrinter_2にprintコマンドが送信されます。

次のコードスニペットの問題点を教えてください。

#include <QSettings> 
#include <QProcess> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    const QString classesRoot = "HKEY_CLASSES_ROOT"; 

    // get ID of .pdf extension 
    QSettings pdfSettings(classesRoot + "\\.pdf", QSettings::NativeFormat); 
    QString pdfId = pdfSettings.value("Default").toString(); 

    // get path to default program that associated with PDF files 
    QString printPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\print\\command", QSettings::NativeFormat).value("Default").toString(); 
    QString openPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\open\\command", QSettings::NativeFormat).value("Default").toString(); 
    qDebug() << "print path" << printPath; 
    qDebug() << "open path" << openPath; 

    // open .pdf file 
    QProcess::startDetached(openPath.arg("full path to pdf file.pdf")); 

    // print .pdf file 
    QProcess printProcess; 
    printProcess.start(printPath.arg("full path to pdf file.pdf")); 
    printProcess.waitForFinished(-1); 

    return 0; 
} 

答えて

0

すみませんが、私は、これは正常な動作であることを合理的に思えると述べたと思います。アプリケーションがすでに開いている、多くの視聴者がそうであるように(同じファイルの別のインスタンスを開くことがないように設計されている場合基本的に何も変更されていないため、現在の設定(あなたの場合は現在のプリンタ)も保存される可能性が非常に高いです。手順を再現しても、PDFファイルを手動で開いてプログラムを置き換えると、同じ結果が表示されることは間違いありません。

外部ビューアを開き、PDFファイル(現在はサードパーティのライブラリ(Popplerなど)を使用しています)を直接ロードしてQtのモジュールを使用して印刷することを避けることをお勧めします。詳細については、this answerを参照してください。

QString printPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\printto\\command", QSettings::NativeFormat).value("Default").toString(); 

そして、 "ファイル名"、 "プリンタ名"、 "プリンタドライバ" と "ポート" を渡し、[ドライバ:代わりにライン

QString printPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\print\\command", QSettings::NativeFormat).value("Default").toString(); 

使用これと予想されるようにすべての作品の

0

名前とポートは必須ではありません]

関連する問題