在matlab中打印多个数字

时间:2014-10-09 17:26:13

标签: matlab matlab-figure printdialog

假设我在程序中生成了几个数字。我想让用户可以选择一次打印所有内容。我不想为每个页面显示打印对话框。因此,我只显示一次,仅显示第一个数字。这是我到目前为止提出的解决方案:

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

但问题是,如果用户取消第一个数字的打印,我无法抓住它并取消其他打印。我该怎么做?

1 个答案:

答案 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结构包含更多可重复使用的信息,包括打印作业选项,当前选定的打印机等...