8

更新:プロジェクトには、TideSDKではなくappjsを使用することにしました。AppJSを使用すると、ノードモジュールを簡単に作成できます。ノードモジュールには、サイレント印刷を簡単に使用するためのC++モジュールを追加できます。このトピックに興味のある人はぜひチェックしてみてください。皆さん、頑張ってください!

私はTideSDKを使用してアプリケーションを開発しています-これは本当に素晴らしいフレームワークです。まだ試していない場合は、しばらく時間を取っておいてください。

とにかく、Javascriptを使って印刷しようとしていますが、他のブラウザと同じように、毎回[印刷設定]ダイアログが表示されます。私はその箱をなくし、印刷したいプリンターを渡そうとしています。

私はFireFoxにサイレント印刷用の設定があることを知っています。つまり、以前に使用したものですが、TideSDK(私が見つけたもの)には同様のオプションはありません。

たくさんの調査の結果、実行可能なオプションは、Pythonスクリプト、C ++モジュール、またはTideSDKソースの編集と再コンパイルだけだと思います。3つすべてが私には緩いように聞こえます。TideSDKソースを変更し、からダイアログボックスを削除しますwebkit_ui_delegate.cpp将来的にこのプログラムを更新するときに、プリンタ名を簡単に渡すことができないことに加えて、いくつかの問題が発生する可能性があります。Pythonスクリプトはサードパーティのモジュールを必要とし、ページのコンテンツを処理する必要があります。その点で質の高い仕事をすることができる何かを書くことができるとは思えません。最後に、C ++ソリューションはwin32apiにアクセスできるため最も実現可能だと思いますが、繰り返しになりますが、HTMLを印刷言語に処理する必要があります。これは私がよく知らないことです。レンダリングを処理するWebkitソリューションをもっと探していると思います。

TideSDKにサイレント印刷を実装するにはどうすればよいですか?コード例を含めてください。

私は主にWindowsソリューションを探していますが、他のプラットフォームについてはすでに理解しています。

お時間をいただきありがとうございます。フィードバックに感謝します。

4

2 に答える 2

1

:これは以前の質問を書き直したものです。

Windows / GDI +印刷が機能する方法は、を使用しPrintDialogてプリンターIDを取得することです(また、ユーザーに印刷先のプリンターを通知します)。したがって、サイレント印刷を行うには、ダイアログを表示せずにプリンタ識別子を取得する必要があります。

したがって、このコードを削除します。

// Open a printing dialog to fetch the HDC of the desired printer.
PRINTDLG dialog;
ZeroMemory(&dialog, sizeof(PRINTDLG));
dialog.lStructSize = sizeof(PRINTDLG);
dialog.Flags = PD_PRINTSETUP | PD_RETURNDC;
BOOL dialogResult = ::PrintDlg(&dialog);

if (!dialogResult) // Error or cancel.
{
    DWORD reason = CommDlgExtendedError();
    if (!reason) // User cancelled.
        return S_OK;

    logger->Error("Could not print page, dialog error code: %i",
        reason);
    return E_FAIL;
}

HDC hdc = dialog.hDC;

そして、最後の行(HDC hdc = ...)を、プリンタHDCを取得する他の方法に置き換えます。を使用GetDefaultPrinter()してデフォルトのプリンタの名前を取得し、を使用してHDCを取得できますCreateDC()

オプションで、プリンターを選択するか、EnumPrinters()関数を使用してカスタム印刷ダイアログを作成できます。

于 2013-01-20T17:36:07.297 に答える
0

この質問が質の高い答えを得られなかったのを見て悲しいです、これは私が自分で実装したかったものです。

この機能をTideSDKで動作させるために必要な時間を投資することは、かなりの冒険になると思います。そのため、質問のコアコンピテンシーから逸脱し、TideSDK以外のフレームワークを試してこれを達成することをお勧めします。それがこの問題の最も現実的な解決策だと思います、そしてそれは私が取るものになるでしょう。

固執するフレームワークが見つかったら、この回答を更新します。

于 2013-01-19T23:18:49.317 に答える