如何使用OpenXML在新Word文件上的所需坐标上添加文本 [英] How to add text on desired coordinates on new word file using openxml

查看:155
本文介绍了如何使用OpenXML在新Word文件上的所需坐标上添加文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用openxml创建.docx文件,并在文件的每一页上的所需坐标(位置)上添加文本. openxml中有什么方法可以调整文本.我正在使用以下代码段:

I want to create .docx file using openxml and add text on desired coordinates(location) on each page of the file. Is there any way in openxml to adjust the text. I am using the following snippet:

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文件上添加文本,但不能在所需的坐标位置上添加文本.有人可以帮忙吗?

Using this I was able to add text on .docx file, but not on desired coordinate location. Can someone help with this?

谢谢.

推荐答案

我找到了一种将文本添加到Word文件页面上的坐标的方法.我从生成的Word文件开始,然后使用Word,添加了一个简单的TextBox(插入->文本->文本框).我使用生产力工具为添加的TextBox生成了代码. (注意:截至本文撰写时,最新版本的 SDK现在为2.5 ,建议使用此功能).

I found a way to add text to a coordinate on the page of a Word file. I started with your generated Word file and using Word, I added a simple TextBox (Insert->Text->TextBox). I generated the code for the added TextBox using the Productivity Tool. (Note: as of this writing, the latest version of the SDK is now 2.5, which is recommended for this to work).

在上面的类中添加以下方法:

Add the following method to your class above:

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);
    }

在我的课程中发现以下用途-您的列表可能不同-但我想在这里详细介绍它们,以防万一.

The following usings were found in my class - your list may be different - but I wanted to detail them here just in case.

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;

最后,将以下两个调用添加到上述方法的最后:

Finally, add the following 2 calls to the very end of your method above:

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文档将如下所示:

and your Word Doc will look like the following:

这篇关于如何使用OpenXML在新Word文件上的所需坐标上添加文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆