Открыть XML SDK, добавив градиентную границу ко всем чертежам - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над собственным проектом и хочу применить градиентные границы ко всем изображениям в файле MS Word . В моем исследовании я смог вставить только новые картинки с заданными параметрами. Проблема в том, что я не могу понять , как получить доступ и настроить существующие элементы изображения . Я подумал, что если я создаю новые элементы, а затем просто добавляю их в файл, он будет работать, но каким-то образом элемент Drawing сбрасывает ошибку, потому что он принадлежит дереву или чему-то другому. Ниже приведен фрагмент кода моего мусорного кода.

            using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(document, true)) {
            MainDocumentPart mainPart = wordprocessingDocument.MainDocumentPart;

            int imageCount = mainPart.GetPartsCountOfType<ImagePart>();
            Console.Write(imageCount);

            Drawing sdtElementDrawing = mainPart.Document.Body.Descendants<Drawing>().First();

            Body body1 = new Body();
            Paragraph paragraph1 = new Paragraph();
            Run run1 = new Run();
            DW.Inline inline1 = new DW.Inline();
            A.Graphic graphic1 = new A.Graphic();
            A.GraphicData graphicData1 = new A.GraphicData();
            PIC.Picture picture1 = new PIC.Picture();
            PIC.ShapeProperties shapeProperties1 = new PIC.ShapeProperties();

            A.NoFill noFill1 = new A.NoFill();
            A.Outline outline1 = new A.Outline(new A.GradientFill(
                                      new A.GradientStopList(
                                          new A.GradientStop(
                                              new A.SchemeColor(
                                                  new A.LuminanceModulation() { Val = 5000 },
                                                  new A.LuminanceOffset() { Val = 95000 }
                                              ) { Val = A.SchemeColorValues.Accent1 }
                                          ) { Position = 0 },
                                          new A.GradientStop(
                                              new A.SchemeColor(
                                                  new A.LuminanceModulation() { Val = 45000 },
                                                  new A.LuminanceOffset() { Val = 55000 }
                                              ) { Val = A.SchemeColorValues.Accent1 }
                                          ) { Position = 74000 },
                                          new A.GradientStop(
                                              new A.SchemeColor(
                                                  new A.LuminanceModulation() { Val = 45000 },
                                                  new A.LuminanceOffset() { Val = 55000 }
                                              ) { Val = A.SchemeColorValues.Accent1 }
                                          ) { Position = 83000 },
                                          new A.GradientStop(
                                              new A.SchemeColor(
                                                  new A.LuminanceModulation() { Val = 30000 },
                                                  new A.LuminanceOffset() { Val = 70000 }
                                              ) { Val = A.SchemeColorValues.Accent1 }
                                          ) { Position = 100000 }),
                                      new A.LinearGradientFill() {
                    Angle = 5400000,
                    Scaled = true
                }
                                  ));

            shapeProperties1.Append(noFill1);
            shapeProperties1.Append(outline1);

            picture1.Append(shapeProperties1);
            graphicData1.Append(picture1);
            graphic1.Append(graphicData1);
            inline1.Append(graphic1);

            sdtElementDrawing.Append(inline1);
            run1.Append(sdtElementDrawing);
            paragraph1.Append(run1);

            mainPart.Document.Body.Append(paragraph1);
        }

1 Ответ

0 голосов
/ 05 сентября 2018

Хорошо, я был очень глуп, когда делал это. Теперь я нашел способ получить доступ и изменить один рисунок. Следующая проблема, которую нужно решить, я должен каким-то образом перебрать все изображения, а не только первое. Более того, я до сих пор не проверял, как это повлияет на изображения разных размеров. Ниже я публикую свой обновленный скрипт:

using (WordprocessingDocument myDocument = WordprocessingDocument.Open(fileName, true)) {
            // Get the first paragraph.

            Paragraph p = myDocument.MainDocumentPart.Document.Body.Elements<Paragraph>().First();
            Run r = p.Elements<Run>().First();
            Drawing drawing1 = r.Elements<Drawing>().First();
            DW.Inline inline1 = drawing1.Elements<DW.Inline>().First();
            A.Graphic graphic1 = inline1.Elements<A.Graphic>().First();
            A.GraphicData graphicData1 = graphic1.Elements<A.GraphicData>().First();
            PIC.Picture picture1 = graphicData1.Elements<PIC.Picture>().First();
            PIC.ShapeProperties shapeProperties1 = picture1.Elements<PIC.ShapeProperties>().First();
            A.Outline outline1 = shapeProperties1.Elements<A.Outline>().First();
            A.NoFill noFillOutline = outline1.Elements<A.NoFill>().First();
            noFillOutline.Remove();

            outline1.AppendChild(new A.GradientFill(
                new A.GradientStopList(
                    new A.GradientStop(
                        new A.SchemeColor(
                            new A.LuminanceModulation() { Val = 5000 },
                            new A.LuminanceOffset() { Val = 95000 }
                        ) { Val = A.SchemeColorValues.Accent1 }
                    ) { Position = 0 },
                    new A.GradientStop(
                        new A.SchemeColor(
                            new A.LuminanceModulation() { Val = 45000 },
                            new A.LuminanceOffset() { Val = 55000 }
                        ) { Val = A.SchemeColorValues.Accent1 }
                    ) { Position = 74000 },
                    new A.GradientStop(
                        new A.SchemeColor(
                            new A.LuminanceModulation() { Val = 45000 },
                            new A.LuminanceOffset() { Val = 55000 }
                        ) { Val = A.SchemeColorValues.Accent1 }
                    ) { Position = 83000 },
                    new A.GradientStop(
                        new A.SchemeColor(
                            new A.LuminanceModulation() { Val = 30000 },
                            new A.LuminanceOffset() { Val = 70000 }
                        ) { Val = A.SchemeColorValues.Accent1 }
                    ) { Position = 100000 }),
                new A.LinearGradientFill() {
                    Angle = 5400000,
                    Scaled = true
                }
            ));
...