MATLAB newbie: ошибка при использовании «saveas» для сохранения графика в виде файла PDF - PullRequest
1 голос
/ 11 июля 2011

Я пользователь 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;

Некоторые дальнейшиеинформация ... Это хорошо работало на прошлой неделе, когда я впервые написал это!С тех пор, я думаю, я обновил Mac OS 10.6.8 с 10.6.7, но больше ничего не изменилось в моем коде или в версии Matlab, которую я использую (R2009a) (если у меня не очень плохая память!).

Кроме того, я наткнулся на несколько старых предложений по схожим вопросам использовать «печать».Я пытался использовать:

print (gcf, 'filename').Я получил PDF, но он не открывается ни в одной программе просмотра PDF.Я предполагаю (но не знаю точно), что это может быть связано с тем, что я использую Mac.Я заметил, что есть несколько вещей (особенно связанных с манипулированием внешними файлами), которые не работают на Mac.

Если кто-то может помочь, я был бы очень благодарен.


Обновление: я нашел GhostScript для Mac и установил его, как предложил Крис.К сожалению, это не сработало.Я читал на форуме, что многие пользователи Mac в настоящее время имеют проблемы с графиками MATLAB, возможно, связанные с Java.На прошлой неделе произошло обновление операционной системы (до OS X 10.6.8), и именно тогда начались проблемы.Мой код работал до этого.

Я до сих пор не нашел решения для этого, и я не думаю, что люди MATLAB тоже, так что если у кого-то есть предложения о том, как сохранить графики БЕЗ использования saveas, яхотел бы услышать их.Команда «print» у меня тоже не работает - она ​​создает PDF-файлы, которые я не могу открыть.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Я думаю, что проблема в том, что GhostScript умирает, а не столько Matlab. Google для этой ошибки GS поднимает много страниц , таких как this . Это вообще применимо? Если вы используете GS за пределами Matlab, это работает?

Кроме того, вы можете взглянуть на это представление FEX export_fig . Это относилось ко мне хорошо. В худшем случае вы можете вывести в png и конвертировать в PDF позже.

1 голос
/ 15 июля 2011

Одна рекомендация, которую я могу дать, - это использовать другой формат, понятный 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 .

...