假设我在程序中生成了几个数字。我想让用户可以选择一次打印所有内容。我不想为每个页面显示打印对话框。因此,我只显示一次,仅显示第一个数字。这是我到目前为止提出的解决方案:
figHandles = get(0, 'Children');
for currFig = 1:length(figHandles)
if(currFig == 1)
printdlg(figHandles(currFig)); % Shows the print dialog for the first figure
else
print(figHandles(currFig)); % Does not show the print dialog and uses the latest printer selection
end
end
但问题是,如果用户取消第一个数字的打印,我无法抓住它并取消其他打印。我该怎么做?
答案 0 :(得分:1)
好的,这是一个非常肮脏的技巧,绝对没有保证它适用于所有版本。它在Matlab 2013a / win 7上对我有用。
要让Matlab返回一个是否执行打印作业的值,您需要在print.m
函数中插入一个小的黑客。
print.m
找到print.m
功能。它应该在..\toolbox\matlab\graphics\print.m
附近的matlab安装文件夹中。
找到后,制作备份副本!(这个技巧很小,不应该破坏任何东西,但我们永远不会知道)。
< / LI>打开文件print.m
并找到行LocalPrint(pj);
,它应该在主函数的附近或末尾(对我来说是〜第240行)。
将行换成:
。
pj = LocalPrint(pj); %// Add output to the call to LocalPrint
if (nargout == 1)
varargout{1} = pj ; %// transfer this output to the output of the `print` function
end
完成黑客攻击。现在每次调用print
函数时,都可以得到一个充满信息的返回参数。
首先请注意,在Windows机器上,printdlg
函数相当于使用print
参数调用'-v'
函数。
因此printdlg(figHandle)
与print('-v',figHandle)
完全相同。 ('-v'
代表verbose
)。我们将使用它。
print
函数的输出将是一个包含许多字段的结构(让我们称之为pj
)。要检查以确定是否实际执行了打印命令的字段是pj.Return
。
pj.return == 0 => job cancelled
pj.return == 1 => job sent to printer
所以在你的情况下,在print.m
进行调整后,它看起来像这样:
pj = print('-v',figHandles(1)); %// Shows the print dialog for the first figure
if pj.Return %//if the first figure was actually printed (and not cancelled)
for currFig = 2:length(figHandles)
print(figHandles(currFig)); %// Does not show the print dialog and uses the latest printer selection
end
end
注意:pj
结构包含更多可重复使用的信息,包括打印作业选项,当前选定的打印机等...