2016-09-10 4 views
1

Я хочу создать файл .docx с помощью openxml и добавить текст на нужные координаты (местоположение) на каждой странице файла. Есть ли способ в openxml для настройки текста. Я использую следующий фрагмент:Как добавить текст в нужные координаты в новом текстовом файле с помощью openxml

WordprocessingDocument doc = WordprocessingDocument.Create("E:\\test11.docx", DocumentFormat.OpenXml.WordprocessingDocumentType.Document); 
      { 
       MainDocumentPart mainPart = doc.AddMainDocumentPart(); 
       mainPart.Document = new Document(); 
       Body body = mainPart.Document.AppendChild(new Body()); 
       Paragraph para = body.AppendChild(new Paragraph()); 
       ParagraphProperties oParagraphProperties = para.AppendChild(new ParagraphProperties()); 
       Run run = para.AppendChild(new Run()); 
       Text tt = new Text(str); 
       run.AppendChild(tt); 
       RunProperties runProp = new RunProperties(); // Create run properties. 
       RunFonts runFont = new RunFonts() { Ascii = "Cambria(Headings)", HighAnsi = "Cambria(Headings)" }; 
       Bold bold = new Bold(); 
       DocumentFormat.OpenXml.Wordprocessing.Color Color1 = new DocumentFormat.OpenXml.Wordprocessing.Color() { Val = "0EBFE9" }; 
       Italic ita = new Italic(); 
       runProp.Append(bold); 
       runProp.Append(Color1); 
       runProp.Append(ita); 
       FontSize size = new FontSize(); 
       size.Val = new StringValue((fontSize * 2).ToString()); // 48 half-point font size 
       runProp.Append(runFont); 
       runProp.Append(size); 
       run.PrependChild<RunProperties>(runProp); 
      } 

Используя это, я был в состоянии добавить текст на .docx файл, но не по желанию координат местоположения. Может кто-нибудь помочь с этим?

Спасибо.

+0

Would добавления текстовое поле в желаемых координатах с нужным текстом внутри текстового поля будет приемлемым решением вашего вопроса? – Taterhead

+0

да..поэтому хорошо. пожалуйста, расскажите мне больше об этом, как я могу это сделать. действительно ценю вашу помощь. – Ashish

ответ

1

Я нашел способ добавить текст в координату на странице файла Word. Я начал с созданного файла Word и использовал Word, я добавил простой TextBox (Insert-> Text-> TextBox). Я сгенерировал код для добавленного TextBox, используя Productivity Tool. (Примечание: начиная с этой записи, последняя версия SDK is now 2.5, которая рекомендуется для этого работать).

Добавьте следующий метод в класс выше:

private static void PlaceTextAtCoordinate(Paragraph para, string text, double xCoordinate, double uCoordinate) 
    { 
     var picRun = para.AppendChild(new Run()); 

     Picture picture1 = picRun.AppendChild(new Picture()); 

     Shapetype shapetype1 = new Shapetype() { Id = "_x0000_t202", CoordinateSize = "21600,21600", OptionalNumber = 202, EdgePath = "m,l,21600r21600,l21600,xe" }; 
     Stroke stroke1 = new Stroke() { JoinStyle = StrokeJoinStyleValues.Miter }; 
     Path path1 = new Path() { AllowGradientShape = true, ConnectionPointType = ConnectValues.Rectangle }; 

     shapetype1.Append(stroke1); 
     shapetype1.Append(path1); 

     Shape shape1 = new Shape() { Id = "Text Box 2", Style = string.Format("position:absolute;margin-left:{0:F1}pt;margin-top:{1:F1}pt;width:187.1pt;height:29.7pt;z-index:251657216;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:200;mso-wrap-distance-left:9pt;mso-wrap-distance-top:3.6pt;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:3.6pt;mso-position-horizontal-relative:text;mso-position-vertical-relative:text;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:top", xCoordinate, uCoordinate), Stroked = false }; 

     TextBox textBox1 = new TextBox() { Style = "mso-fit-shape-to-text:t" }; 

     TextBoxContent textBoxContent1 = new TextBoxContent(); 

     Paragraph paragraph2 = new Paragraph(); 

     Run run2 = new Run(); 
     Text text2 = new Text(); 
     text2.Text = text; 

     run2.Append(text2); 

     paragraph2.Append(run2); 

     textBoxContent1.Append(paragraph2); 

     textBox1.Append(textBoxContent1); 
     TextWrap textWrap1 = new TextWrap() { Type = WrapValues.Square }; 

     shape1.Append(textBox1); 
     shape1.Append(textWrap1); 

     picture1.Append(shapetype1); 
     picture1.Append(shape1); 
    } 

Следующие usings были найдены в моем классе - ваш список может быть разным - но я хотел бы подробно их здесь на всякий случай.

using DocumentFormat.OpenXml; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Vml; 
using DocumentFormat.OpenXml.Vml.Office; 
using DocumentFormat.OpenXml.Vml.Wordprocessing; 
using DocumentFormat.OpenXml.Wordprocessing; 

Наконец, добавьте следующие 2 вызова в самом конце вашего метода выше:

PlaceTextAtCoordinate(para, "Text at 90.1,90.1", 90.1, 90.1); 
PlaceTextAtCoordinate(para, "Text at 120.5,120.5", 120.1, 120.1); 

и ваш Word Doc будет выглядеть следующим образом:

enter image description here

+0

Hey Taterhead, Спасибо за вашу помощь. Теперь моя проблема заключается в том, что я не могу управлять шириной и высотой текстового поля в соответствии с его текстом. Так что, пожалуйста, помогите мне в этом? – Ashish

+1

Добро пожаловать. Я могу попытаться помочь тебе дальше. Во-первых, отметьте это как ответ. Затем добавьте новую проблему в новый вопрос со скриншотом и деталями и вернитесь к этому. Таким образом, все сообщество может оказать помощь, а также воспользоваться ответом. – Taterhead

+0

эй Taterhead, вы можете посмотреть на проблемы, с которыми я столкнулся здесь: http://stackoverflow.com/questions/40100052/textbox-positioning-in-openxml – Ashish