Вставка изображений в футерC#

Место общения программистов C#
Ответить
Anonymous
 Вставка изображений в футер

Сообщение 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/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
Ответить

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

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

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

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

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