MATLAB 图形的 PDF 文件紧凑边界框

5
在 MATLAB 中创建简单图形并将其保存为 PDF 时,生成的 PDF 文件将具有豪华的边界框。
plot(1,1,'x')
print(gcf, '-dpdf', 'test.pdf');

(从输出比例来看,它们似乎总是在A页面上放置。)

有没有一种简单的方法来获取PDF文件的紧密边界框?

2个回答

4
你可以按照以下方式格式化边界框。
figure(1)
hold on;
plot(1,1,'x')

ps = get(gcf, 'Position');
ratio =  ps(4) / ps(3)
paperWidth = 10;
paperHeight = paperWidth*ratio;


set(gcf, 'paperunits', 'centimeters');
set(gcf, 'papersize', [paperWidth paperHeight]);
set(gcf, 'PaperPosition', [0    0   paperWidth paperHeight]);


print(gcf, '-dpdf', 'test2.pdf');

如果要得到小一点的边框,可以调整 paperposition 属性,例如:

set(gcf, 'PaperPosition', [-0.5   -0.5   paperWidth+0.5 paperHeight+0.5]);

我更正了比率的计算,因为它是错误的,正如Space47的回答所指出的那样。(感谢@Space47)。


这会修改宽高比并生成仍带有(较小)边框的PDF。也许有一种方法可以读取边界框的尺寸?无论如何,“PaperPosition”肯定很有趣。 - Nico Schlömer
@Nico:我更新了我的答案,以考虑纵横比和较小的边框。 - H.Muster
1
另一个答案 指出了比率计算中的问题,应该是 ps(4)/ps(3)。似乎前两个条目是位置,即与高度和宽度无关。 - RoG
1
@RoG:谢谢提醒。我已经更正了。 - H.Muster

3

虽然这是一个老问题,但我还是来回答一下,因为在 Mathworks 的帮助页面之前,Google 搜到了这篇文章(很抱歉我的声望还不足以在之前发表评论)。

无论如何,让我们继续。

ratio = (ps(4)-ps(2)) / (ps(3)-ps(1))

应该是

ratio = ps(4)/ps(3);

作为第一个值,gcf.Position 是屏幕上的 [x,y] 位置,与尺寸无关。
此外,Matlab(R) 给出了一个答案,特别是如果您不想/需要调整图形大小:https://se.mathworks.com/help/matlab/creating_plots/save-figure-with-minimal-white-space.html
fig = gcf;
fig.PaperPositionMode = 'auto'
fig_pos = fig.PaperPosition;
fig.PaperSize = [fig_pos(3) fig_pos(4)];

感谢您的纠正,我已经相应地编辑了我的答案。 - H.Muster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接