在matlab中打印多个图形

在matlab中打印多个图形,matlab,matlab-figure,printdialog,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 f

假设我在程序中生成了几个图形。我想给用户一次打印所有内容的选项。我不想为每页显示打印对话框。因此,我只显示一次,并且仅显示第一个图形。这就是我目前提出的解决方案:

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

但问题是,如果用户取消第一个图形的打印,我就无法捕捉到它并取消其他打印。我应该如何做到这一点呢?

好的,这是一个相当肮脏的把戏,绝对不能保证它适用于所有版本。它在Matlab2013a/win 7上对我确实有效

要让Matlab返回一个关于它是否执行打印作业的值,需要在
print.m
函数中插入一个小的hack


黑客
print.m
  • 找到
    print.m
    功能。它应该在
    。\toolbox\matlab\graphics\print.m
    附近的matlab安装文件夹中

  • 找到后,制作备份副本(这个技巧很小,不应该破坏任何东西,但我们永远不知道)

  • 打开文件
    print.m
    ,找到行
    LocalPrint(pj),它应该在主函数的末尾或附近(对于我来说是第240行)

  • 将该行替换为:

  • 保存文件
干得好。现在,每次调用
print
函数时,都会有一个返回参数,其中包含大量信息


适用于您的情况: 首先,请注意,在windows计算机上,
printdlg
函数相当于使用
'-v'
参数调用
print
函数。
因此
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
结构包含更多可重用信息,包括打印作业选项、当前选定的打印机等…

基于一个旧Matlab的来源-不确定它是否可以返回任何内容,因为它使用
eval
进行打印。这是一个非常有趣的问题,但您可能需要修改标题,以显示您希望检索打印作业的状态。
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