2010-12-29 5 views
1

У меня есть .docx-шаблон с «контролем содержимого изображения», который помещается внутри фигуры. Я успешно вставил выбранный пользователем образ в эту конкретную область, так как пользователь выбрал изображения разных размеров. Я ищу решение для программной регулировки масштаба по высоте и ширине как «Контроль содержимого изображения», так и контейнер (Shape) , Я использую это решение для вставки изображений в мой .docx шаблона: http://www.codeproject.com/KB/office/Word_2007_Images.aspxИзменение размера изображения в документе Word Программно

ответ

0

Для этих вещей, я часто нахожу наиболее полезный ответ может исходить от записи макроса, делая то, что вы хотите, чтобы программа делать, то просматривая код, созданный макросом, и при необходимости настраивая его. Макрос покажет вам, как использовать объекты Word, чтобы делать то, что вы хотите сделать.

+0

Thnks Lance, но я ищу решение «OPENXML» – Damon

0

Это вызвало у меня много неприятностей, но я нашел решение:

//Get SdtElement (can be a block, run... so I use the base class) with corresponding Tag 
SdtElement block = doc.MainDocumentPart.Document.Body.Descendants<SdtElement>() 
    .FirstOrDefault(sdt => sdt.SdtProperties.GetFirstChild<Tag>()?.Val == contentControlTag) 

//Get First drawing Element and get the original sizes of placeholder SDT 
//I use SDT placeholder size as maximum size to calculate picture size with correct ratios 
Drawing sdtImage = block.Descendants<Drawing>().First(); 
double sdtWidth = sdtImage.Inline.Extent.Cx; 
double sdtHeight = sdtImage.Inline.Extent.Cy; 
double sdtRatio = sdtWidth/sdtHeight; 

*Calculate final width/height of image* 

//Resize picture placeholder 
sdtImage.Inline.Extent.Cx = finalWidth; 
sdtImage.Inline.Extent.Cy = finalHeight; 

//Change width/height of picture shapeproperties Transform 
//This will override above height/width until you manually drag image for example 
sdtImage.Inline.Graphic.GraphicData 
     .GetFirstChild<DocumentFormat.OpenXml.Drawing.Pictures.Picture>() 
     .ShapeProperties.Transform2D.Extents.Cx = finalWidth; 
sdtImage.Inline.Graphic.GraphicData 
     .GetFirstChild<DocumentFormat.OpenXml.Drawing.Pictures.Picture>() 
     .ShapeProperties.Transform2D.Extents.Cy = finalHeight; 

После всего этого я выбираю для удаления элемента управления содержимым и вставьте код из sdtContent так же, как запустить в моем но это необязательно, конечно :)

Смежные вопросы