使用Matlab将图像打印为pdf,无边距

时间:2013-11-23 19:01:55

标签: image matlab pdf matlab-figure

我正在尝试使用我在这些问题中找到的答案:

将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”似乎设置不正确。有可能修复的想法吗?

注意

如果我更改landscapeportrait之间的方向,结果是相同的,只需以不同的方式切割图像。

但是,如果使用saveas(h,outfilename);指令保存图像,则会生成正确的输出。

这是为什么?这两个保存指令有什么区别?

1 个答案:

答案 0 :(得分:2)

总而言之,你提到的答案提供了很多方法,但大多数方法都没有为我工作。当你想要紧密插入时,他们中的大多数搞砸了你的纸张,唯一对我有用的是:

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

修改:如果您使用painters作为渲染器saveas,则print会产生类似的结果。对于jpegs print是可取的,因为您可以指定分辨率。