Вставить картинку в существующую фигуру - PullRequest
0 голосов
/ 12 февраля 2020

Возникает проблема при вставке изображения в документ PPTX.

Я хочу создать новый слайд на основе маски слайда. Я использовал этот код для установки изображения в существующую фигуру

class Program
    {

        public static void Run()
        {
            string dataDir = ConfigurationManager.AppSettings["directoryToSave"];
            string srcDir = String.Concat(ConfigurationManager.AppSettings["Source"], "Master.pptx");
            string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            //string file = Path.Combine(appData, srcDir);
            using (Presentation presentation = new Presentation(srcDir))
            {
                IMasterLayoutSlideCollection layoutSlides = presentation.Masters[0].LayoutSlides;
                ILayoutSlide layoutSlide = null;

                foreach (ILayoutSlide titleAndObjectLayoutSlide in layoutSlides)
                {
                    if (titleAndObjectLayoutSlide.Name == "TITRE_CONTENU")
                    {
                        layoutSlide = titleAndObjectLayoutSlide;
                        break;
                    }
                }
                string filePath = String.Concat(ConfigurationManager.AppSettings["Source"], @"Logos\bp.png");
                Image imgs = (Image)new Bitmap(filePath);

                setShapePicture(presentation, layoutSlide, "picture", imgs);
                presentation.Slides.InsertEmptySlide(0, layoutSlide);
                presentation.Save(dataDir + "AddLayoutSlides_out.pptx", SaveFormat.Pptx);
            }
        }
        public static void setShapePicture(Presentation doc, ILayoutSlide layoutSlide, string shapeName, Image image)
        {
            var logo_shape = layoutSlide.Shapes.SingleOrDefault(r => r.Name.Equals(shapeName));
            IPPImage imgx = doc.Images.AddImage(image);
            //Add Picture Frame with height and width equivalent of Picture
            logo_shape.FillFormat.FillType = FillType.Picture;
            // Set the picture fill mode
            logo_shape.FillFormat.PictureFillFormat.PictureFillMode = PictureFillMode.Stretch;
            // Set the picture
            logo_shape.FillFormat.PictureFillFormat.Picture.Image = imgx;
        }
        static void Main(string[] args)
        {
            try
            {
                var path = ConfigurationManager.AppSettings["sourceAsposeLicensePath"];
                License license = new License();
                license.SetLicense(path);
                Run();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error" + ex.Message);
            }
            finally
            {
                Console.WriteLine("Terminated");
                Console.ReadKey();
            }
        }

    }

В сгенерированном файле я получаю форму с фоновым рисунком и заполнителем. Вы можете найти все ресурсы по этой ссылке MasterSlide + Logos + Output

1 Ответ

0 голосов
/ 13 февраля 2020

Я соблюдаю общие для вас требования и хотел бы поделиться тем, что заполнитель не является реальной формой, а дает каркас для формы. Для вашего удобства я создал пример кода, который может помочь вам в достижении ваших требований.

public static void TestPlaceholderImage()
{
    String path = "C:\\Aspose Data\\";
    Presentation pres = new Presentation(path + "TestPicture.pptx");

    foreach (ISlide slide in pres.Slides)
    {
        foreach (IShape shape in slide.Shapes)
        {
            if (shape.Placeholder != null)
            {
                if (shape.Placeholder.Type == PlaceholderType.Picture)
                {
                    // Instantiate the ImageEx class
                    System.Drawing.Image img = (System.Drawing.Image)new Bitmap(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
                    IPPImage imgx = pres.Images.AddImage(img);

                    shape.FillFormat.FillType = FillType.Picture;
                    shape.FillFormat.PictureFillFormat.Picture.Image = imgx;

                    if (shape is AutoShape)
                    {
                        ITextFrame text = ((IAutoShape)shape).TextFrame;
                        text.Text = " ";
                        text.Paragraphs[0].ParagraphFormat.Bullet.Type = BulletType.None;

                    }
                }
            }
        }
    }

    pres.Save(path + "Addedpic.pptx", Aspose.Slides.Export.SaveFormat.Pptx);
}

Я работаю разработчиком поддержки / евангелистом в Aspose.

SampleData.zip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...