Добавьте фоновое изображение в Word с OpenXMLC#

Место общения программистов C#
Ответить
Anonymous
 Добавьте фоновое изображение в Word с OpenXML

Сообщение Anonymous »

Я читаю файл шаблона Word, который обрабатываю в своем коде. < /p>
Я хочу установить фоновое изображение указанного документа. Вот как я это делаю
`< /p>
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filePath, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = new Body();
mainPart.Document.Append(body);

SectionProperties sectionProperties = new SectionProperties(
new PageSize()
{
Width = (UInt32Value)16838U,
Height = (UInt32Value)11906U,
Orient = PageOrientationValues.Landscape
},
new PageMargin()
{
Top = 1440,
Right = 1440,
Bottom = 1440,
Left = 1440,
Header = 720,
Footer = 720,
Gutter = 0
}
);
body.AppendChild(sectionProperties);

var MainPageImgUrl = tocsInfo.FirstOrDefault(x => x.id == 7)?.images["background1"];
if (!string.IsNullOrEmpty(MainPageImgUrl))
{
byte[] imageBytes = await DownloadBackgroundImage(MainPageImgUrl);

// Görseli ImagePart'e ekle
ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png);
using (MemoryStream stream = new MemoryStream(imageBytes))
{
imagePart.FeedData(stream);

BinaryWriter bw = new BinaryWriter(stream);
bw.Write(imageBytes);
bw.Close();
}

string imageId = mainPart.GetIdOfPart(imagePart);
DocumentBackground docBg = new DocumentBackground()
{
Color = "FFFFFF",
};

V.Background bg = new V.Background()
{
Id = "_x0000_s1025",
BlackWhiteMode = V.Office.BlackAndWhiteModeValues.White,
TargetScreenSize = V.Office.ScreenSizeValues.Sz1024x768,
};

bg.AddNamespaceDeclaration("v", "urn:schemas-microsoft-com:vml");

V.Fill fill = new V.Fill()
{
RelationshipId = imageId, // Doğru ID kullanımı
Title = "background",
Recolor = false,
Type = V.FillTypeValues.Frame,
Aspect = V.ImageAspectValues.Ignore,
};

var settingsPart = mainPart.DocumentSettingsPart;
if (settingsPart == null)
{
settingsPart = mainPart.AddNewPart();
settingsPart.Settings = new Settings();
}

settingsPart.Settings.Append(new DisplayBackgroundShape());
settingsPart.Settings.Save();

bg.Append(fill);
docBg.Append(bg);

mainPart.Document.InsertAt(docBg, 0);
}

body.Append(new Paragraph(new Run(new Break() { Type = BreakValues.Page })));

mainPart.Document.Save();
}
< /code>
Когда я делаю это так, изображение появляется, но я не могу установить изображение на странице из -за «Displaybackgroundshape ()», оно переполняется. Если я определяю другое свойство, а не type = v.filltypevalues.frame, на экране не появляется изображение. /п>

Подробнее здесь: https://stackoverflow.com/questions/794 ... th-openxml
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»