MATLAB新手:错误使用“saveas”将绘图保存为pdf文件

时间:2011-07-10 21:04:51

标签: macos matlab pdf printing save-as

我是Mac(10.6.8)用户。我编写了用于绘制计算结果的MATLAB代码,然后将绘图保存为pdf。我使用“saveas”(见下面的例子)。

我收到此错误:

??? Error using ==> print at 325
Problem converting PostScript. System returned error: -1.Failed to convert to output format; Ghostscript status: -100.**** Unable to open the initial device, quitting.

Error in ==> saveas at 155
        print( h, name, ['-d' dev{i}] )

Error in ==> Results_processor at 1219
saveas(gcf,saveFigTo1, 'pdf')

以下是相关的代码:

calculationResultsPath    = '/Me/Projects/ThisProject';
calculationResultsDirectory          = strcat( calculationResultsPath,'MATLABProcessedResults' );
mkdir( calculationResultsDirectory );

% ...Code for importing results to be plotted from external files (works fine)...

% ...Code for plotting (works fine)... I get the figures I want.

% The problem is:
saveFigTo1    = strcat(resultsDirectory,'/majorsMgO.pdf') 
saveas(gcf,saveFigTo1, 'pdf') 
hold off
pause
clf;

一些进一步的信息......上周我第一次写这篇文章时工作正常!从那时起,我想我从10.6.7更新到Mac OS 10.6.8,但我的代码或我使用的Matlab版本(R2009a)没有其他任何改变(除非我的内存非常糟糕!)。

另外,我在类似的问题上遇到了一些使用“打印”的旧建议。我尝试使用:

打印(GCF, '文件名')。我确实得到了pdf,但它不会在任何pdf查看程序中打开。我假设(但不确定)这可能与我使用Mac的事实有关。我注意到有一些东西(特别是与外部文件操作有关)不能在Mac上运行。

如果有人可以提供帮助,我将非常感激。


更新: 我找到了一个GhostScript for Mac并按照Chris的建议安装了它。不幸的是,这不起作用。我在一个论坛上看到许多Mac用户目前在使用MATLAB图时遇到问题,可能与java有关。上周有一个操作系统更新(到OS X 10.6.8),这是问题开始的时候。我的代码在此之前有效。

我仍然没有找到解决方案,我不认为MATLAB人员也有,所以如果有人有关于如何在没有使用saveas的情况下保存情节的建议,我很乐意听到它们。 “print”命令对我来说也不起作用 - 它会生成我无法打开的PDF文件。

2 个答案:

答案 0 :(得分:2)

我认为这里的问题是GhostScript死亡而不是Matlab。针对该GS错误的Google会出现许多pages,例如this。这一切都适用吗?如果你在Matlab之外使用GS它有效吗?

顺便说一句,您可以查看此FEX提交export_fig。它对我很好。最糟糕的情况是你可以输出到png并稍后转换为PDF。

答案 1 :(得分:1)

我可以提出的一个建议是使用OS X理解的不同格式,并通过系统调用将结果转换为pdf

查看以下内容是否有效:

% Load a test image
im = imread('cameraman.tif');

imshow(im); % display the image

saveas(gcf,'test.tif','tif');

% convert to pdf using a syscall to cupsfilter
!cupsfilter test.tif > test.pdf 2> /dev/null

% open the file with your default pdf viewer 
!open test.pdf

如果上述方法不起作用,另一种方法是从图窗口获取位图并使用imwrite写入。 注意,此方法无法受益于saveasprint的精美字体缩放功能。这种方法假设上面的im变量仍然存在。

imagesc(im); colormap gray;

% Set the border color to white
set(h,'Color',[1 1 1]);

% Get the image in the figure
frame = getframe(gcf);
imout = frame.cdata;

% on OS X, the stretch window image 
% appears in the bottom right corner 
% of the image.  Remove it. 
imout = imout(10:end-9,10:end-9,:);

% Write the image out to a lossless tif
imwrite(imout,'test.tif','tif','Compression','none')

然后您可以将tifs转换为pdf文件,如上所述。图的质量取决于图的大小。在大多数情况下,我不会使用第二种方法,因为saveas很好地处理字体。 使用getframe仅作为解决saveas 的真正问题的解决方法。