我是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文件。
答案 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
写入。 注意,此方法无法受益于saveas
和print
的精美字体缩放功能。这种方法假设上面的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 的真正问题的解决方法。