2013-11-23 8 views
2

Я пытаюсь использовать ответы, которые я нашел в этих вопросах:Печать изображения в формате PDF без края с помощью Matlab

напечатать MATLAB сюжет в pdf без наличия белых полей.

Однако, используя этот код:

function saveTightFigure(h, outfilename, orientation) 

% SAVETIGHTFIGURE(H,OUTFILENAME) Saves figure H in file OUTFILENAME without 
% the white space around it. 
% 
% by ``a grad student" 
% http://tipstrickshowtos.blogspot.com/2010/08/how-to-get-rid-of-white-margin-in.html 

% get the current axes 
ax = get(h, 'CurrentAxes'); 

% make it tight 
ti = get(ax,'TightInset'); 
set(ax,'Position',[ti(1) ti(2) 1-ti(3)-ti(1) 1-ti(4)-ti(2)]); 

% adjust the papersize 
set(ax,'units','centimeters'); 
pos = get(ax,'Position'); 
ti = get(ax,'TightInset'); 
set(h, 'PaperUnits','centimeters'); 
set(h, 'PaperSize', [pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]); 
set(h, 'PaperPositionMode', 'manual'); 
set(h, 'PaperPosition',[0 0 pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]); 

% save it 
%saveas(h,outfilename); 
if(orientation == 1) 
    orient portrait 
else 
    orient landscape 
end 
print('-dpdf', outfilename); 

end 

Результаты этого вывода:

enter image description here

Как вы можете увидеть 'PaperSize', кажется, установить не правильно. Любая идея о возможных исправлениях?

Примечание

Если изменить ориентацию между landscape и portrait результат один и тот же, просто изображение рубленые по-другому.

Однако, если я сохраню изображение с помощью команды saveas(h,outfilename);, выдается правильный выход.

Почему это? И в чем разница между двумя инструкциями сохранения?

+1

Я, наконец, сдался, пытаясь распечатать в pdf напрямую и начал печатать в формате eps, который я могу легко преобразовать в pdf при необходимости. – nispio

ответ

2

Все ответы, которые вы упомянули, предлагают множество подходов, но большинство из них не сработало и для меня. Большинство из них задрать PaperSize, когда вы хотите, чтобы получить плотную вставку, единственный, который работал для меня:

set(axes_handle,'LooseInset',get(axes_handle,'TightInset')); 

я наконец написал функцию, где указать высоту и ширину выходного рисунка на бумаги и поля, который я хочу (или просто установите его на ноль). Имейте в виду, что вам также необходимо передать ось. Возможно, эти функции также работают на вас.

function saveFigure(fig_handle, axes_handle, name , height , width , margin) 

set(axes_handle,'LooseInset',get(axes_handle,'TightInset')); 
set(fig_handle, 'Units','centimeters','PaperUnits','centimeters') 

% the last two parameters of 'Position' define the figure size 
set(fig_handle,'Position',[-margin -margin width height],... 
     'PaperPosition',[0 0 width+margin height+margin],... 
     'PaperSize',[width+margin height+margin],... 
     'PaperPositionMode','auto',... 
     'InvertHardcopy', 'on',... 
     'Renderer','painters'...  %recommended if there are no alphamaps 
    ); 
saveas(fig_handle,name,'pdf') 

end 

Edit: если вы используете painters в качестве визуализатора saveas и print должны производить аналогичные результаты. Для jpegs print предпочтительнее, так как вы можете указать разрешение.

+0

Для 'axes_handle' я использую, например,' h = gca; ', но как я могу указать имя? – AboAmmar

+0

@AboAmmar У меня нет вашего вопроса. – thewaywewalk

+0

, @ thewaywewalk Да, я назвал его 'file.pdf' и пошел хорошо, но для более старых версий matlab (я тестировал 2009b) он обручает фигуру с заданной« высотой, шириной », начиная с нижней левой части, теряя информацию. Однако в Matlab 2015a он работал хорошо, но правый край слишком туго, что маркеры на краю обрезаны. – AboAmmar

Смежные вопросы