Как прочитать гиперссылку изображения в Power Point с помощью c #

1

Я вставил изображение в powerpoint с помощью С# и вставил гиперссылку на картинку и ее работу отлично. Но теперь мне нужно прочитать гиперссылку на эту картинку, которую я вставил с помощью С#.

В то время как я вставляю текст с гиперссылкой в powerpoint с помощью С#, и я читаю гиперссылку обратно из powerpoint с помощью метода ниже.

for (int i = 0; i < presentation.Slides.Count; i++)
        {
            foreach (var item in presentation.Slides[i + 1].Shapes)
            {
                var shape = (PPT.Shape)item;
                if (shape.HasTextFrame == MsoTriState.msoTrue)
                {
                    if (shape.TextFrame.HasText == MsoTriState.msoTrue)
                    {
                        var textRange = shape.TextFrame.TextRange;
                        var text = textRange.Text;

                        string address=textRange.ActionSettings[PPT.PpMouseActivation.ppMouseClick].Hyperlink.Address;
                    }
                }
            }

        }

где я получаю адрес гиперссылки в переменном адресе, также я должен получить гиперссылка на изображении, которое я вставил в РРТ с помощью С#.

Является ли это возможным.??

Теги:
hyperlink
ms-office
office-interop

1 ответ

1
Лучший ответ

Один из вариантов - перебрать через Shapes на слайде и посмотреть, содержат ли они гиперссылку. Или вы должны придать вашему изображению идентификатор при его создании, а затем найти его по данному идентификатору.

    private void GetHyperlink()
    {
        Microsoft.Office.Interop.PowerPoint.Application objApp = new Microsoft.Office.Interop.PowerPoint.Application();
        objApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
        Presentations objPresSet = objApp.Presentations;
        Presentation p = objPresSet.Open("C:\test.ppt");
        Slide slide = p.Slides[1];
        // or Slide slide = objApp.ActiveWindow.View.Slide;

        for (int i = 1; i <= slide.Shapes.Count; i++)
        {
            //If the hyperlink address is filled then display it in MessageBox
            if (slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
        }
    }

Этот код отобразит все гиперссылки на слайде 1. Также было бы интересно использовать Open XML SDK для этой цели вместо автоматизации.

Интересная ссылка:

http://www.aspose.com/docs/display/slidesnet/Finding+a+Shape+in+a+Slide

РЕДАКТИРОВАТЬ:

Я предлагаю вам сначала изменить код, создающий изображение с гиперссылкой:

        //Add a picture
        Shape pic = slide.Shapes.AddPicture(@"C:\Users\Public\Pictures\Sample Pictures\koala.jpg",
        Microsoft.Office.Core.MsoTriState.msoFalse,
        Microsoft.Office.Core.MsoTriState.msoTrue,
        shape.Left, shape.Top, shape.Width, shape.Height);

        //Here you have various options how to distinguish your shape
        pic.Name = "MyPic";
        pic.AlternativeText = "Koala";
        pic.Tags.Add("MyPic", "@http://www.google.com/");

        //adding hyperlink, etc...
        pic.ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address =@"http://www.google.com/"

Затем, когда вы читаете файл, вы можете использовать теги или имя для различения фигур:

            //tags check
            if (slide.Shapes[i].Tags.Count > 0 && slide.Shapes[i].Tags["MyPic"]!=null && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
            //or
            //name check
            if (slide.Shapes[i].Name.Equals("MyPic", StringComparison.InvariantCultureIgnoreCase) && slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address != null)
                MessageBox.Show(slide.Shapes[i].ActionSettings[PpMouseActivation.ppMouseClick].Hyperlink.Address);
  • 1
    @vDhhnal: но он также может показать гиперссылку других также на.?
  • 0
    Да, вы должны сначала найти правильную форму по ее идентификатору, а затем вы можете легко получить гиперссылку.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню