ASP.NET в PowerPoint: файл поврежден при добавлении изображения - PullRequest
0 голосов
/ 07 октября 2010

Я использовал этот пример при экспорте данных в PowerPoint:

Я изменил метод GenerateSlidesFromDB ():

public void GenerateSlidesFromDB()
    {
        string slideName = @"C:\Users\x\Desktop\output.pptx";
        File.Copy(@"C:\Users\x\Desktop\Test.pptx", slideName, true);

        using (PresentationDocument presentationDocument = PresentationDocument.Open(slideName, true))
        {
            PresentationPart presentationPart = presentationDocument.PresentationPart;
            SlidePart slideTemplate = (SlidePart)presentationPart.GetPartById("rId2");
            string firstName = "Test User";
            SlidePart newSlide = CloneSlidePart(presentationPart, slideTemplate);
            InsertContent(newSlide, firstName);
            newSlide.Slide.Save();
            DeleteTemplateSlide(presentationPart, slideTemplate);
            presentationPart.Presentation.Save();
        }
    }

Как видите, я перезаписываюзаполнитель с «Test User», и он работает как шарм.Мне нужно добавить изображение (в качестве заполнителя) в этот pptx-файл.

Когда я делаю это (и снова запускаю код), я получаю поврежденный pptx-файл?Сообщение об ошибке:

PowerPoint удалил нечитаемый контент в output.pptx.Вам следует просмотреть эту презентацию, чтобы определить, было ли какое-либо содержимое неожиданно изменено или удалено.

Редактировать: если я попробую оригинальный код (который слегка изменен, поскольку у меня нет Adventureworks), я получу другой видсообщения об ошибке:

Этот файл мог быть поврежден или поврежден по следующим причинам: Сторонние редакторы XML иногда создают файлы, несовместимые со спецификациями Microsoft Office XML.Файл был намеренно поврежден с целью нанести вред вашему компьютеру или вашим данным.Будьте осторожны при открытии файла из неизвестного источника.PowerPoint может попытаться восстановить данные из файла, но некоторые данные презентации, такие как фигуры, текст и форматирование, могут быть потеряны.Выполните одно из следующих действий. Если вы хотите восстановить данные из файла, нажмите кнопку «Да».Если вы не хотите восстанавливать данные из файла, нажмите Нет.

1 Ответ

0 голосов
/ 07 октября 2010

Хорошо, извините за этот бесполезный пост.Мой плохой.

Решение:

 string imgId = "rIdImg" + i;
                ImagePart imagePart = newSlide.AddImagePart(ImagePartType.Jpeg, imgId);
                MemoryStream stream3 = new MemoryStream();
                using (FileStream file = File.Open(@"C:\Users\x\Desktop\Test.jpg", FileMode.Open))
                {
                    byte[] buffer = new byte[file.Length];
                    file.Read(buffer, 0, (int)file.Length);
                    stream3.Write(buffer, 0, buffer.Length);
                    imagePart.FeedData(new MemoryStream(buffer));
                }
                SwapPhoto(newSlide, imgId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...