在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
附近的matlab安装文件夹中。\toolbox\matlab\graphics\print.m
- 找到后,制作备份副本(这个技巧很小,不应该破坏任何东西,但我们永远不知道)
- 打开文件
,找到行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