Darryl Bryk Ответов: 1

Как программно получить полезную высоту страницы в документе word/шаблоне


Мое программное обеспечение копирует графики в документ Word, и документ основан на различных шаблонах, созданных пользователями, поэтому полезная высота страницы варьируется в зависимости от верхнего/нижнего колонтитула и полей. Я пытаюсь оптимизировать высоту графика, и на странице может быть 2-3 графика, в зависимости от типа отчета.

Что я уже пробовал:

Я пробовал использовать диапазон.Параметры.Свойство PageHeight и вычитание диапазона.Параметры.Свойства Topmargin, Ассортимент.Параметры.Свойства Bottommargin, Ассортимент.Параметры.HeaderDistance, и ряд.Параметры.FooterDistance, но расчет, похоже, чего-то не хватает, то есть возвращаемая высота графика немного слишком велика или мала, чтобы соответствовать количеству графиков на pg. Я понимаю, что это зависит от того, когда этот расчет выполняется в коде, так как форматирование может быть скорректировано, поэтому расчет выполняется непосредственно перед обработкой графика.

Maciej Los

Какой метод вы используете для копирования графика?

Darryl Bryk

Код для копирования графика:
использование (MemoryStream mem = новый MemoryStream()) {
чт.SaveImage(mem, ChartImageFormat.Bmp);
используя (растровое изображение в формате BMP = новое растровое изображение(мем)) {
Буфер обмена.Устанавливает раскрывающееся меню(БМП);
если (буфер обмена.ContainsImage())
пар.диапазон.Вставить();
else throw new Exception("буфер обмена.Ошибка ContainsImage() ");
}
}

Gerry Schmitz

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

Darryl Bryk

Я бы предпочел не полагаться на пользователей, которые делают шаблоны, определяющие размещение изображений.

1 Ответов

Рейтинг:
2

Maciej Los

Дэррил Брик писал::
Код для копирования графика:
using (MemoryStream mem = new MemoryStream()) {
cht.SaveImage(mem, ChartImageFormat.Bmp);
using (Bitmap bmp = new Bitmap(mem)) {
Clipboard.SetImage(bmp);
if (Clipboard.ContainsImage())
par.Range.Paste();
else throw new Exception("Clipboard.ContainsImage() failed");
}
}


Я был почти уверен, что вы вставляете изображение вместо графика...

Один из способов подгонки изображения-добавить изображение в ячейку таблицы. Я бы предложил использовать таблицу без полей и изменить ее значение по умолчанию AutoFitBehaviour к wdAutoFitWindow Вы также можете попробовать использовать wdAutoFitFixed Пожалуйста, смотрите: Стол.Метод AutoFitBehavior (Word) | Microsoft Docs[^]

Другое решение заключается в использовании Объект TextFrame (Word) | Microsoft Docs[^].


Darryl Bryk

Да, Word позволит вставить изображение на страницу с автоматическим изменением размера, но это не позволяет мне сделать так, чтобы у него было 2-3 изображения на страницу. Для этого мне нужно подогнать заполнители, как было предложено выше, или изменить их размер путем расчета, что я и пытаюсь сделать.

Мне кажется, что Microsoft знает, как взломать эту информацию. out, так как он автоматически изменяет размер, поэтому он знает, сколько места осталось на pg. Мне просто нужно знать, как получить доступ к той же информации.