更新:我决定将appjs用于我的项目,而不是TideSDK。使用AppJS,您可以轻松制作节点模块,您可以在其中添加C ++模块以便于使用静音打印。我推荐任何对这个主题感兴趣的人来看一下。祝大家好运!
我正在使用TideSDK开发一个应用程序 - 这是一个非常棒的框架,如果您还没有尝试过,请将时间放在一边!
无论如何,我正在尝试使用Javascript进行打印,但每次都会出现一个“打印设置”对话框,就像其他浏览器一样。我正试图消除那个盒子以及传递我想要打印的打印机。
我知道FireFox中有静音打印的设置,这是我之前使用的,但TideSDK没有任何类似的选项(我发现)。
经过大量研究,我认为唯一可行的选择包括python脚本,C ++模块或编辑TideSDK源并重新编译。这三个听起来像是对我松了一口气。修改TideSDK源并从webkit_ui_delegate.cpp
删除对话框很可能会导致在更新此程序时出现一些问题 - 除了无法轻松传递打印机名称。 python脚本需要第三方模块,并且必须处理页面的内容,我怀疑我是否能够写出能够在这方面做出高质量工作的东西。最后,我认为C ++解决方案是最可行的,因为它可以访问win32api,但同样,它必须将HTML处理成打印语言,这是我不熟悉的。我想我正在寻找更多的webkit解决方案来处理渲染。
如何在TideSDK上实现静音打印?请包含代码示例。
我正在寻找一个 windows 解决方案,我已经想通了 其他平台。
感谢您的时间,感谢您的反馈!
答案 0 :(得分:1)
注意:这是对早期问题的重写。
Windows / GDI +打印的工作方式是它使用PrintDialog
来获取打印机标识符(并让用户知道他们要打印的打印机)。因此,为了进行静音打印,您需要获取打印机标识符而不显示对话框。
REMOVE 此代码:
// 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()
获取默认打印机的名称,然后使用CreateDC()
获取HDC。
您可以选择使用EnumPrinters()
功能选择打印机或创建自定义打印对话框。
答案 1 :(得分:0)
伤心地看到这个问题没有得到任何答复的质量,这是我想要实现我自己。
我认为投入使用此功能所需的时间与TideSDK合作将是一个冒险。因此,我将偏离问题的核心竞争力,并建议您尝试除TideSDK之外的框架来实现此目的。我认为这是解决这个问题的最强现实解决方案,它将是我所采用的解决方案。
一旦找到了我将坚持使用的框架,我就会更新这个答案。