У меня есть файл шаблона, он содержит элементы управления для вставки изображений. Картинка нормально вставляется в тело документа и первая карточка в нижний колонтитул тоже, но когда я вставляю вторую картинку в нижний колонтитул, который находится в ячейках таблицы, у меня файл ломается
Ошибка при открытии
Причем ошибка отображается в шапке, а я туда даже ничего не добавляю
Начать вставлять изображение< /p>
IEnumerable sdtBlockList = body.Descendants();
IEnumerable sdtBlockFooterList = wordDoc.MainDocumentPart.FooterParts.SelectMany(x => x.Footer.Descendants());
string tagKey = ((TeoTagModel)value).TagKey;
var footerParts = wordDoc.MainDocumentPart.FooterParts;
var sdtBlocks = sdtBlockList.Where(sdt => sdt.SdtProperties.GetFirstChild().Val.Value == tagKey);
var sdtBlockFooter = sdtBlockFooterList.Where(sdt => sdt.SdtProperties.GetFirstChild().Val.Value == tagKey);
var footer = footerParts
.FirstOrDefault(f => f.Footer.Descendants()
.FirstOrDefault(a => a.SdtProperties.GetFirstChild().Val.Value == tagKey) != null);
if (sdtBlocks.Any())
{
var elementDrawing = CreateImageSignatureForBody(wordDoc.MainDocumentPart, (TeoTagModel)value);
InsertImageSignatureAtTab(sdtBlocks, elementDrawing);
}
if (sdtBlockFooter.Any())
{
var elementDrawing = CreateImageSignatureForHeader(footer, (TeoTagModel)value);
InsertImageSignatureAtTab(sdtBlockFooter, elementDrawing);
}
footer.Footer.Save();
Создание изображения
private Drawing CreateDrawingElement(string idOfPart, string tagKey)
{
return new Drawing(
new DW.Inline(
new DW.Extent() { Cx = 100000L, Cy = 102000L },
new DW.EffectExtent()
{
LeftEdge = 0L,
TopEdge = 0L,
RightEdge = 0L,
BottomEdge = 0L
},
new DW.DocProperties()
{
Id = (UInt32Value)1U,
Name = $"Picture{tagKey}"
},
new DW.NonVisualGraphicFrameDrawingProperties(
new A.GraphicFrameLocks()),
new A.Graphic(
new A.GraphicData(
new PIC.Picture(
new PIC.NonVisualPictureProperties( new A.PictureLocks() { NoChangeAspect = true, NoChangeArrowheads = true },
new PIC.NonVisualDrawingProperties()
{
Id = (UInt32Value)0U,
Name = $"Picture{tagKey}"
},
new PIC.NonVisualPictureDrawingProperties()),
new PIC.BlipFill(
new A.Blip(
new A.BlipExtensionList(
new A.BlipExtension()
{
Uri =
"{28A0092B-C50C-407E-A947-70E740481C1C}"
})
)
{
Embed = idOfPart,
CompressionState =A.BlipCompressionValues.Print
},
new A.Stretch(
new A.FillRectangle())),
new PIC.ShapeProperties(
new A.Transform2D(
new A.Offset() { X = 0L, Y = 0L },
new A.Extents() { Cx = 100000L, Cy = 102000L }),
new A.PresetGeometry(
new A.AdjustValueList()
)
{ Preset = A.ShapeTypeValues.Rectangle }))
)
{ Uri = "http://schemas.openxmlformats.org/drawi ... 06/picture" })
)
{
DistanceFromTop = (UInt32Value)0U,
DistanceFromBottom = (UInt32Value)0U,
DistanceFromLeft = (UInt32Value)0U,
DistanceFromRight = (UInt32Value)0U,
EditId = "50D07946"
});
}
Создание ImagePart
private Drawing CreateImageSignatureForBody(MainDocumentPart mainDocumentPart, TeoTagModel signatureTeoTag)
{
if (signatureTeoTag.TagValue.Item2 == null) return null;
ImagePartType imagePartType;
if (ImagePartType.TryParse(signatureTeoTag.TagValue.Item1, out imagePartType))
{
ImagePart imagePart = mainDocumentPart.AddImagePart(imagePartType);
using (MemoryStream stream = new MemoryStream(signatureTeoTag.TagValue.Item2))
{
imagePart.FeedData(stream);
}
var element = CreateDrawingElement(mainDocumentPart.GetIdOfPart(imagePart), signatureTeoTag.TagKey);
return element;
}
return null;
}
private Drawing CreateImageSignatureForHeader(FooterPart footerPart, TeoTagModel signatureTeoTag)
{
if (signatureTeoTag.TagValue.Item2 == null) return null;
ImagePartType imagePartType;
if (ImagePartType.TryParse(signatureTeoTag.TagValue.Item1, out imagePartType))
{
ImagePart imagePart = footerPart.AddImagePart(imagePartType,"rId999");
using (MemoryStream stream = new MemoryStream(signatureTeoTag.TagValue.Item2))
{
imagePart.FeedData(stream);
}
var element = CreateDrawingElement(footerPart.GetIdOfPart(imagePart), signatureTeoTag.TagKey);
return element;
}
return null;
}
Вставить изображение
private void InsertImageSignatureAtTab(IEnumerable sdtBlocks, Drawing signatureImage)
{
if(sdtBlocks.Count() != 0)
{
foreach(var sdtBlock in sdtBlocks)
{
try
{
if (sdtBlock is SdtCell)
{
var tableCell = sdtBlock.Descendants().FirstOrDefault();
var run = tableCell.Descendants().FirstOrDefault();
run.RemoveAllChildren();
run.Append(signatureImage);
}
else if (sdtBlock is SdtRun)
{
sdtBlock.Descendants().FirstOrDefault().Append(signatureImage);
}
else if(sdtBlock is SdtBlock)
{
sdtBlock.Descendants().FirstOrDefault().Append(signatureImage);
}
}
catch (Exception ex)
{
throw new Exception($"Ошибка при добавление подписи: {ex.Message}");
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... the-footer
Вставка изображений в футер ⇐ C#
Место общения программистов C#
1733198451
Anonymous
У меня есть файл шаблона, он содержит элементы управления для вставки изображений. Картинка нормально вставляется в тело документа и первая карточка в нижний колонтитул тоже, но когда я вставляю вторую картинку в нижний колонтитул, который находится в ячейках таблицы, у меня файл ломается
Ошибка при открытии
Причем ошибка отображается в шапке, а я туда даже ничего не добавляю
Начать вставлять изображение< /p>
IEnumerable sdtBlockList = body.Descendants();
IEnumerable sdtBlockFooterList = wordDoc.MainDocumentPart.FooterParts.SelectMany(x => x.Footer.Descendants());
string tagKey = ((TeoTagModel)value).TagKey;
var footerParts = wordDoc.MainDocumentPart.FooterParts;
var sdtBlocks = sdtBlockList.Where(sdt => sdt.SdtProperties.GetFirstChild().Val.Value == tagKey);
var sdtBlockFooter = sdtBlockFooterList.Where(sdt => sdt.SdtProperties.GetFirstChild().Val.Value == tagKey);
var footer = footerParts
.FirstOrDefault(f => f.Footer.Descendants()
.FirstOrDefault(a => a.SdtProperties.GetFirstChild().Val.Value == tagKey) != null);
if (sdtBlocks.Any())
{
var elementDrawing = CreateImageSignatureForBody(wordDoc.MainDocumentPart, (TeoTagModel)value);
InsertImageSignatureAtTab(sdtBlocks, elementDrawing);
}
if (sdtBlockFooter.Any())
{
var elementDrawing = CreateImageSignatureForHeader(footer, (TeoTagModel)value);
InsertImageSignatureAtTab(sdtBlockFooter, elementDrawing);
}
footer.Footer.Save();
Создание изображения
private Drawing CreateDrawingElement(string idOfPart, string tagKey)
{
return new Drawing(
new DW.Inline(
new DW.Extent() { Cx = 100000L, Cy = 102000L },
new DW.EffectExtent()
{
LeftEdge = 0L,
TopEdge = 0L,
RightEdge = 0L,
BottomEdge = 0L
},
new DW.DocProperties()
{
Id = (UInt32Value)1U,
Name = $"Picture{tagKey}"
},
new DW.NonVisualGraphicFrameDrawingProperties(
new A.GraphicFrameLocks()),
new A.Graphic(
new A.GraphicData(
new PIC.Picture(
new PIC.NonVisualPictureProperties( new A.PictureLocks() { NoChangeAspect = true, NoChangeArrowheads = true },
new PIC.NonVisualDrawingProperties()
{
Id = (UInt32Value)0U,
Name = $"Picture{tagKey}"
},
new PIC.NonVisualPictureDrawingProperties()),
new PIC.BlipFill(
new A.Blip(
new A.BlipExtensionList(
new A.BlipExtension()
{
Uri =
"{28A0092B-C50C-407E-A947-70E740481C1C}"
})
)
{
Embed = idOfPart,
CompressionState =A.BlipCompressionValues.Print
},
new A.Stretch(
new A.FillRectangle())),
new PIC.ShapeProperties(
new A.Transform2D(
new A.Offset() { X = 0L, Y = 0L },
new A.Extents() { Cx = 100000L, Cy = 102000L }),
new A.PresetGeometry(
new A.AdjustValueList()
)
{ Preset = A.ShapeTypeValues.Rectangle }))
)
{ Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
)
{
DistanceFromTop = (UInt32Value)0U,
DistanceFromBottom = (UInt32Value)0U,
DistanceFromLeft = (UInt32Value)0U,
DistanceFromRight = (UInt32Value)0U,
EditId = "50D07946"
});
}
Создание ImagePart
private Drawing CreateImageSignatureForBody(MainDocumentPart mainDocumentPart, TeoTagModel signatureTeoTag)
{
if (signatureTeoTag.TagValue.Item2 == null) return null;
ImagePartType imagePartType;
if (ImagePartType.TryParse(signatureTeoTag.TagValue.Item1, out imagePartType))
{
ImagePart imagePart = mainDocumentPart.AddImagePart(imagePartType);
using (MemoryStream stream = new MemoryStream(signatureTeoTag.TagValue.Item2))
{
imagePart.FeedData(stream);
}
var element = CreateDrawingElement(mainDocumentPart.GetIdOfPart(imagePart), signatureTeoTag.TagKey);
return element;
}
return null;
}
private Drawing CreateImageSignatureForHeader(FooterPart footerPart, TeoTagModel signatureTeoTag)
{
if (signatureTeoTag.TagValue.Item2 == null) return null;
ImagePartType imagePartType;
if (ImagePartType.TryParse(signatureTeoTag.TagValue.Item1, out imagePartType))
{
ImagePart imagePart = footerPart.AddImagePart(imagePartType,"rId999");
using (MemoryStream stream = new MemoryStream(signatureTeoTag.TagValue.Item2))
{
imagePart.FeedData(stream);
}
var element = CreateDrawingElement(footerPart.GetIdOfPart(imagePart), signatureTeoTag.TagKey);
return element;
}
return null;
}
Вставить изображение
private void InsertImageSignatureAtTab(IEnumerable sdtBlocks, Drawing signatureImage)
{
if(sdtBlocks.Count() != 0)
{
foreach(var sdtBlock in sdtBlocks)
{
try
{
if (sdtBlock is SdtCell)
{
var tableCell = sdtBlock.Descendants().FirstOrDefault();
var run = tableCell.Descendants().FirstOrDefault();
run.RemoveAllChildren();
run.Append(signatureImage);
}
else if (sdtBlock is SdtRun)
{
sdtBlock.Descendants().FirstOrDefault().Append(signatureImage);
}
else if(sdtBlock is SdtBlock)
{
sdtBlock.Descendants().FirstOrDefault().Append(signatureImage);
}
}
catch (Exception ex)
{
throw new Exception($"Ошибка при добавление подписи: {ex.Message}");
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79246212/inserting-images-in-the-footer[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия