【问题标题】:Tight bounding box around PDF of MATLAB figureMATLAB 图的 PDF 周围的紧密边界框
【发布时间】:2012-08-23 01:06:13
【问题描述】:

在 MATLAB 中创建简单图形并将其保存为 PDF 时,生成的 PDF 文件将具有豪华的边界框。

plot(1,1,'x')
print(gcf, '-dpdf', 'test.pdf');

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

有没有一种简单的方法可以在 PDF 周围设置一个紧密的边界框?

【问题讨论】:

    标签: matlab pdf figure bounding-box


    【解决方案1】:

    你可以如下格式化边界框

    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:我更新了我的答案以考虑纵横比和更小的边框。
    • Another answer指出比率计算有问题,应该是ps(4)/ps(3)。前两个条目似乎是位置,即与高度和宽度无关。
    • @RoG:感谢您的提醒。我更正了。
    【解决方案2】:

    一个老问题,但我会回答,因为谷歌在 Mathworks 自己的帮助页面之前为我找到了这个(对不起,没有足够的声誉来发表评论到以前)。 反正

    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)];
    

    【讨论】:

    • 感谢指正;我相应地编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多