Как сохранить график в файл PDF без большого поля вокруг [дубликата]

38

Если я распечатаю график в формате EPS, содержимое EPS файла полностью занято графиком. Но если я напечатаю сюжет в формате PDF, тогда есть большие поля выше и ниже графика в файле PDF. Как сохранить сюжет в файле PDF без большого запаса вокруг графика?

Мое предположение заключается в том, как автоматически выбрать нужный "бумажный" размер в PDF файле для печати в соответствии с размером графика.

Это вопрос, который я задал в tex.stackexchange.com, где у меня есть ответы, которые в основном пытались решить проблему за пределами MATLAB, и я до сих пор не совсем понимаю единственный ответ, который пытался решить из MATLAB. Поэтому я хотел бы посмотреть, есть ли здесь больше мнений.

Теги:

8 ответов

17

Что вы подразумеваете под "правильным размером"? MATLAB цифры похожи на векторную графику, поэтому вы можете в принципе выбрать нужный размер на вашем сюжете.

Вы можете установить размер бумаги и положение фигуры с помощью функции set.

Пример:

plot(epx(1:5));
set(gcf, 'PaperPosition', [0 0 5 5]); %Position plot at left hand corner with width 5 and height 5.
set(gcf, 'PaperSize', [5 5]); %Set the paper to have width 5 and height 5.
saveas(gcf, 'test', 'pdf') %Save figure

Изображение 6341

Приведенный выше код удалит большую часть границ, но не все. Это связано с тем, что левый угол ([0 0] в векторе положения) не является "истинным" левым углом. Чтобы удалить больше границ, вы можете отрегулировать векторы PaperPosition и PaperSize.

Пример:

plot(exp(1:5))
set(gcf, 'PaperPosition', [-0.5 -0.25 6 5.5]); %Position the plot further to the left and down. Extend the plot to fill entire paper.
set(gcf, 'PaperSize', [5 5]); %Keep the same paper size
saveas(gcf, 'test', 'pdf')

Изображение 6342

  • 0
    Как вы могли бы установить меньшие поля для самого окна, а не только для бумаги? Благодарю.
10

Это работает для отображения целей:

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

Должен работать и для печати. ​​

9

Размер осей в MATLAB иногда может быть немного сложным. Вы правы, чтобы подозревать свойства бумаги в качестве одной из проблем. Другой - автоматические поля, которые рассчитывает MATLAB. К счастью, есть настраиваемые свойства осей, которые позволяют обойти эти поля. Вы можете reset, чтобы поля были достаточно большими для меток осей, используя комбинацию свойств Position и TightInset, которые объясняются здесь. Попробуйте следующее:

>> h = figure;
>> axes;
>> set(h, 'InvertHardcopy', 'off');
>> saveas(h, 'WithMargins.pdf');

и вы получите PDF файл, который выглядит так: Изображение 6343 но теперь сделайте следующее:

>> tightInset = get(gca, 'TightInset');
>> position(1) = tightInset(1);
>> position(2) = tightInset(2);
>> position(3) = 1 - tightInset(1) - tightInset(3);
>> position(4) = 1 - tightInset(2) - tightInset(4);
>> set(gca, 'Position', position);
>> saveas(h, 'WithoutMargins.pdf');

и вы получите: Изображение 6344

  • 0
    Как вы могли бы установить меньшие поля для самого окна, а не только для бумаги? Благодарю.
  • 0
    @Drazick - выше делает это. Сначала создаются небольшие поля в окне перед сохранением его в PDF, поэтому вы должны видеть небольшие поля на экране. Взгляните на ссылку в ответе, чтобы узнать больше о свойстве TightInset и позиционировании осей в целом.
Показать ещё 2 комментария
6
4

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

Размер фигуры должен быть равен размеру бумаги, а белые поля отсутствуют.

A = hgload('myFigure.fig');

% set desired output size
set(A, 'Units','centimeters')
height = 15;
width = 19;

% the last two parameters of 'Position' define the figure size
set(A, 'Position',[25 5 width height],...
       'PaperSize',[width height],...
       'PaperPositionMode','auto',...
       'InvertHardcopy', 'off',...
       'Renderer','painters'...     %recommended if there are no alphamaps
   );

saveas(A,'printout','pdf')

Дает вам выход в формате pdf, поскольку ваша фигура появится точно в нужном размере. Если вы хотите, чтобы это было еще плотнее, вы можете объединить это решение с ответом b3.

4

Функция export_fig в обмене файлами MATLAB обрезает пробелы вокруг выходного файла PDF/EPS по умолчанию при экспорте фигуры.

3

Сохранить в EPS, а затем конвертировать в PDF:

saveas(gcf, 'nombre.eps', 'eps2c')
system('epstopdf nombre.eps') %Needs TeX Live (maybe it works with MiKTeX).

Вам понадобится программное обеспечение, которое преобразует EPS в PDF.

-3
system ('/usr/bin/pdfcrop filename.pdf'); 
  • 2
    Пожалуйста, подумайте над добавлением объяснения, чтобы идти с кодом / командой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню