Insert Image in word document in particular position using OPEN XML SDK
#region Process Picture in word document
private void ProcessImage(WordprocessingDocument myDoc)
{
try
{
foreach (Paragraph p in myDoc.MainDocumentPart.Document.Body.Descendants<Paragraph>().Where<Paragraph>(p =>
p.InnerText.ToUpper().Contains("{{Image}}")))
{
string SignOfUser = string.Empty;
if (p.InnerText.Contains("{{")
&& p.InnerText.Contains("}}") && p.InnerText.Contains(":"))
{
SignOfUser =
p.InnerText.Replace("{{", "").Replace("}}", "").Split(':')[1];
}
IEnumerable<Text> texts =
p.Descendants<Text>();
foreach (Text text in texts)
{
text.Text = "";
}
if (string.IsNullOrEmpty(SignOfUser)
== false)
{
SPFile file =
GetWatermarkImage(SignOfUser + ".jpeg");
if (file != null)
{
MainDocumentPart mainPart = myDoc.MainDocumentPart;
ImagePart imagePart =
mainPart.AddImagePart(ImagePartType.Jpeg);
using (Stream stream =
file.OpenBinaryStream())
{
imagePart.FeedData(stream);
}
AddImageToBody(myDoc, p, mainPart.GetIdOfPart(imagePart));
}
}
}
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
private void AddImageToBody(WordprocessingDocument wordDoc, Paragraph p, string relationshipId)
{
try
{
//
Define the reference of the image.
Drawing element =
new Drawing(
new OPDrawingWP.Inline(
new OPDrawingWP.Extent() { Cx = 999000L,
Cy = 799000L },
new OPDrawingWP.EffectExtent()
{
LeftEdge = 0L,
TopEdge = 0L,
RightEdge =
0L,
BottomEdge =
0L
},
new OPDrawingWP.DocProperties()
{
Id = (UInt32Value)1U,
Name = "Picture 1"
},
new OPDrawingWP.NonVisualGraphicFrameDrawingProperties(
new DocumentFormat.OpenXml.Drawing.GraphicFrameLocks() {
NoChangeAspect = true }),
new OPDrawing.Graphic(
new OPDrawing.GraphicData(
new PIC.Picture(
new PIC.NonVisualPictureProperties(
new PIC.NonVisualDrawingProperties()
{
Id = (UInt32Value)0U,
Name = "New Bitmap
Image.jpg"
},
new PIC.NonVisualPictureDrawingProperties()),
new PIC.BlipFill(
new OPDrawing.Blip(
new
OPDrawing.BlipExtensionList(
new OPDrawing.BlipExtension()
{
Uri =
"{28A0092B-C50C-407E-A947-70E740481C1C}"
})
)
{
Embed = relationshipId,
CompressionState =
OPDrawing.BlipCompressionValues.Print
},
new OPDrawing.Stretch(
new OPDrawing.FillRectangle())),
new PIC.ShapeProperties(
new OPDrawing.Transform2D(
new OPDrawing.Offset() { X = 0L, Y = 0L
},
new
OPDrawing.Extents()
{ Cx = 999000L, Cy = 799000L }),
new OPDrawing.PresetGeometry(
new
OPDrawing.AdjustValueList()
)
{ Preset = OPDrawing.ShapeTypeValues.Rectangle }))
) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
)
{
DistanceFromTop =
(UInt32Value)0U,
DistanceFromBottom
= (UInt32Value)0U,
DistanceFromLeft =
(UInt32Value)0U,
DistanceFromRight
= (UInt32Value)0U,
EditId = "50D07946"
});
//
Append the reference to paragraph, the element should be in a Run.
p.AppendChild(new Run(element));
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
#endregion
No comments:
Post a Comment