Абзац не изменяется на желаемый формат в ppt с openxml

#c# #xml #error-handling #powerpoint #openxml

#c# #xml #обработка ошибок #powerpoint #openxml

Вопрос:

Я пытаюсь отредактировать абзац в pptx, изменив его текст, размер шрифта, стиль шрифта и выравнивание.

Это то, что я сделал до сих пор:

   **this is the method im using to call the update paragraph**

    public static void Main(string[] args)
    {
       
        using (PresentationDocument presentationDocument = PresentationDocument.Open("ppturl", true))
        {
            // Get the presentation part of the presentation document.
            PresentationPart presentationPart = presentationDocument.PresentationPart;

            // Verify that the presentation part and presentation exist.
            if (presentationPart != null amp;amp; presentationPart.Presentation != null)
            {
                // Get the Presentation object from the presentation part.
                Presentation presentation = presentationPart.Presentation;

                // Verify that the slide ID list exists.
                if (presentation.SlideIdList != null)
                {
     
                        SlideId sourceSlide = presentation.SlideIdList.ChildElements[0] as SlideId;
                        SlidePart slidePart = presentationPart.GetPartById(sourceSlide.RelationshipId) as SlidePart;

                    updateParagraph(slidePart);
                }
            }
        }

        Console.ReadLine();

        CreateHostBuilder(args).Build().Run();
    }
   
**Here im extracting the title in the slide because this is what i need.**

    public static void updateParagraph(SlidePart slidePart)
    {
        if (slidePart == null)
        {
            throw new ArgumentNullException("presentationDocument");
        }

        if (slidePart.Slide != null)
        {
            // Find all the title shapes.
            var shapes = from shape in slidePart.Slide.Descendants<Shape>()
                         where IsTitleShape(shape)
                         select shape;
            foreach (P.Shape shape in shapes)
            {
                D.Paragraph paragraph = shape.TextBody.Elements<D.Paragraph>().FirstOrDefault();
                shape.TextBody.RemoveAllChildren<D.Paragraph>();
                AddNewParagraph(shape, "This is a new Slide");

            }
           
        }
    }


  **This is where i am trying to add a new paragraph with specific style**

    public static void AddNewParagraph(this P.Shape shape, string NewText)
    {

        D.Paragraph p = new D.Paragraph();

        P.TextBody docBody = shape.TextBody;
        Justification justification1 = new Justification() { Val = JustificationValues.Center };
        p.ParagraphProperties=new D.ParagraphProperties(justification1);
        D.Run run = new D.Run(new D.Text(NewText));
        D.RunProperties runProp = new D.RunProperties() { Language = "en-US", FontSize = 9, Dirty = false };
        run.AppendChild(runProp);
        D.Text newText = new D.Text(NewText);
        run.AppendChild(newText);
        Console.WriteLine("--------------------------------------------------------------");
        Console.WriteLine(runProp.FontSize.ToString());
        Console.WriteLine("--------------------------------------------------------------");
        p.Append(run);
        docBody.Append(p);

    }
  

Это выдает мне ошибку всякий раз, когда я пытаюсь открыть pptx «исправить ошибку pptx».
Может кто-нибудь, пожалуйста, предоставить четкое решение, специфичное для pptx, а не для doc.?

Благодарен..

Комментарии:

1. Можете ли вы открыть файл вручную с помощью Power Point на компьютере, который вы используете? Ошибка, похоже, связана с совместимостью с версией Power Point (Office) на вашем компьютере и версией OpenXML, которую вы используете.

2. Нет, я не мог, на самом деле эта ошибка появляется, когда я открываю ее вручную, в моей IDE ничего нет. @jdweng

3. Microsoft Office не полностью работает с OpenXML. У вас есть средство просмотра, отличное от Microsoft, которое вы можете использовать?

4. <a:p><a:pPr algn=»ctr»/><a:r><a: rPr lang=»en-US» dirty=»0″><a:latin typeface=»Arial» pitchFamily=»2″ charset=»-78″/><a:cs typeface=»Arial» pitchFamily=»2″ charset=»-78″/></a:rPr>< a: t> Это новый день </a: t></a: r></ a: p> не могли бы вы сказать мне, плз, как мне проанализировать закрывающие теги? как выполнить, чтобы где-то начинаться и заканчиваться где-то в другом месте? @jdweng

Ответ №1:

Вы можете попробовать использовать Aspose.Слайды для .NET. Следующий пример кода показывает вам, как изменить некоторые свойства абзаца с помощью этой библиотеки:

 using (var presentation = new Presentation("example.pptx"))
{
    var firstShape = (IAutoShape) presentation.Slides[0].Shapes[0];
    var firstParagraph = firstShape.TextFrame.Paragraphs[0];
    var firstPortion = firstParagraph.Portions[0];

    firstPortion.Text = "New text.";
    firstPortion.PortionFormat.FontHeight = 24;
    firstPortion.PortionFormat.FontBold = NullableBool.True;

    firstParagraph.ParagraphFormat.Alignment = TextAlignment.Center;

    presentation.Save("example.pptx", SaveFormat.Pptx);
}
  

Вы также можете оценить Aspose.Slides Cloud SDK для .NET. Этот API на основе REST позволяет вам совершать 150 бесплатных вызовов API в месяц для изучения API и обработки презентаций. Следующий пример кода показывает вам, как изменить настройки абзаца с помощью Aspose.Облако слайдов:

 var slidesApi = new SlidesApi("my_client_id", "my_client_key");

var fileName = "example.pptx";
var slideIndex = 1;
var shapeIndex = 1;
var paragraphIndex = 1;
var portionIndex = 1;

var firstPortion = slidesApi.GetPortion(
    fileName, slideIndex, shapeIndex, paragraphIndex, portionIndex);

firstPortion.Text = "New text.";
firstPortion.FontHeight = 24;
firstPortion.FontBold = Portion.FontBoldEnum.True;

slidesApi.UpdatePortion(
    fileName, slideIndex, shapeIndex, paragraphIndex, portionIndex, firstPortion);

var firstParagraph = slidesApi.GetParagraph(
    fileName, slideIndex, shapeIndex, paragraphIndex);

firstParagraph.Alignment = Paragraph.AlignmentEnum.Center;

slidesApi.UpdateParagraph(
    fileName, slideIndex, shapeIndex, paragraphIndex, firstParagraph);
  

Я работаю разработчиком поддержки в Aspose.