ASP.NET到PowerPoint:添加图像时文件被破坏

时间:2010-10-07 13:31:27

标签: asp.net xml powerpoint

将数据导出到PowerPoint时,我使用了this示例:

我修改了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();
        }
    }

正如您所看到的,我用“测试用户”覆盖了占位符,它就像一个魅力。 我需要在这个pptx文件中添加一个图像(作为占位符)。

当我这样做(并再次运行代码)时,我得到一个损坏的pptx文件? 错误讯息:

  

PowerPoint删除了不可读的内容   在output.pptx中。你应该复习   此演示文稿确定是否   任何内容都意外地改变了   或者删除。

编辑:如果我尝试原始代码(因为我没有Adventureworks而略有修改),我会收到一些其他类型的错误消息:

此文件可能已损坏或损坏,原因如下: 第三方XML编辑器有时会创建与Microsoft Office XML规范不兼容的文件。 该文件故意损坏,意图损害您的计算机或您的数据。 从未知来源打开文件时要小心。 PowerPoint可以尝试从文件中恢复数据,但某些表示数据(如形状,文本和格式)可能会丢失。 执行以下操作之一: 如果要从文件中恢复数据,请单击“是”。 如果您不想从文件中恢复数据,请单击“否”。

1 个答案:

答案 0 :(得分:0)

好的,抱歉这个无用的帖子。我的坏。

解决方案:

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