好吧,这是一个非常肮脏的把戏,绝对不能保证它适用于所有版本。它在 Matlab 2013a / win 7 上对我有用。
要让 Matlab 返回一个关于它是否执行打印作业的值,您需要在print.m
函数中插入一个小技巧。
黑客攻击print.m
找到print.m
函数。它应该在您的 matlab 安装文件夹中..\toolbox\matlab\graphics\print.m
。
找到后,制作备份副本!(这个技巧是次要的,不应该破坏任何东西,但我们永远不知道)。
打开文件print.m
并找到 line LocalPrint(pj);
,它应该在 main 函数的附近或末尾(对我来说是 ~line 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
结构包含更多可重复使用的信息,包括打印作业选项、当前选择的打印机等...