想像一下,有这样的需求:既要允许用户自己设置打印参数,又能让用户不必每次都去设置打印参数,以简化打印操作,我们可以利用JCP保存打印参数到注册表的功能来实现。
JCP保存打印设置到注册表,就是将打印参数,如打印机、纸张类型、边距等,事先保存到注册表,并以一个ID 标记,以后,直接打印时只要告诉 JCP 这个ID,JCP就会到注册表中找到对应的设置来打印了。以下是打印设置保存到注册表中的样子:
 所有的打印设置,被保存在 HKEY_CURRENT_USER\Software\jatools\jatoolsPrinter 下,左侧注册项名称是设置ID,右侧是具体的打印设置。
假设给用户的界面是这样的:
所有的打印设置,被保存在 HKEY_CURRENT_USER\Software\jatools\jatoolsPrinter 下,左侧注册项名称是设置ID,右侧是具体的打印设置。
假设给用户的界面是这样的:
 用户多数情况下,都是点直接打印(不弹任何对话框)来打印,只有在第一次打印或者需要更改打印设置时,才点击 设置打印参数,
设置打印参数 的作用是,显示一个打印参数设置面板,让用户可以在此面板中来设置参数,并保存到注册表,以下是点击后显示的面板效果:
用户多数情况下,都是点直接打印(不弹任何对话框)来打印,只有在第一次打印或者需要更改打印设置时,才点击 设置打印参数,
设置打印参数 的作用是,显示一个打印参数设置面板,让用户可以在此面板中来设置参数,并保存到注册表,以下是点击后显示的面板效果:
 保存设置到注册表的代码:
保存设置到注册表的代码:
复制内容到剪贴板
代码:
function saveSettings() {
	var settings = {
		printer : document.getElementById('printer-list').value,// 设置选中的打印机  
		paperName : document.getElementById('paper-list').value,// 设置选中的纸张  
		orientation : document.getElementById('portrait').checked ? 1 : 2, // 方向  
		marginLeft : parseFloat(document.getElementById('leftmargin').value), // 边距  
		marginTop : parseFloat(document.getElementById('topmargin').value),
		marginRight : parseFloat(document.getElementById('rightmargin').value),
		marginBottom : parseFloat(document.getElementById('bottommargin').value)
	}
	getJCP().setLastSettings("订单", settings);
}
代码先从界面上收集到设置的参数,放到一个js 对象中,然后用 JCP 的 setLastSettings方法将设置保存到注册表,该方法的第一个参数是设置ID,在直接打印代码中要用到,第二个参数是设置。
直接打印按钮要执行的代码:
复制内容到剪贴板
代码:
function doPrint() {
	var myDoc = {
		settingsId : '订单',
		documents : document,
		copyrights : '杰创软件拥有版权  www.jatools.com'
	};
	getJCP().print(myDoc, false); // 不弹出对话框打印
}
直接打印时,不实际设置打印参数,而代之以通过设置myDoc. settingsId
的方式,让JCP使用保存在注册表中的设置,如果在注册表中,没有这个设置,JCP会使用系统的默认设置,如默认打印机,默认纸张等。
可以保存在注册表中的打印参数包括:
| printer | 输出打印机 | 
| paperHeight | 纸张高度 | 
| paperWidth | 纸张宽度 | 
| marginLeft | 左边距 | 
| marginRight | 右边距 | 
| marginTop | 上边距 | 
| marginBottom | 下边距 | 
| noMargins | 是否零边距 | 
| orientation/portrait | 纸张方向 | 
| copies | 打印份数 | 
| collate | 是否逐份打印 |