Správa hyperlinků v prezentacích v .NET
Úvod
Hyperlink propojuje obsah prezentace s webovou stránkou nebo umístěním v rámci prezentace. V PowerPointu slouží hyperlinky obvykle ke dvěma účelům:
- Otevřít webovou stránku z textu, tvaru nebo mediálního rámce.
- Přesunout se na jiný snímek, například z obsahu.
Aspose.Slides pro .NET vám umožňuje přidávat tyto odkazy, řídit jejich vzhled a zvuk, aktualizovat jejich vlastnosti a odstraňovat je. Níže uvedené příklady ukazují, jak pracovat s hyperlinky na jednotlivých prvcích a jak získat přístup k hyperlinkům na úrovni prezentace, snímku nebo textového rámce.
Note
Můžete také upravovat prezentace pomocí bezplatného online editoru Aspose PowerPoint.Přidat URL hyperlinky
Můžete přiřadit URL webové stránky k textu, tvaru nebo mediálnímu rámci. Prvek, ke kterému hypertextový odkaz přiřadíte, určuje klikací oblast: část textu propojí vybraný text, zatímco tvar nebo rámec propojí objekt snímku.
Pro prezentace obsahující relativní hyperlinky viz Spravovat základ hyperlinky pro čtení, změnu nebo vymazání základny na úrovni dokumentu.
Přidat URL hyperlinky k textu
Pro propojení textu s webovou stránkou přiřaďte Hyperlink k vlastnosti HyperlinkClick textové části, jak je ukázáno níže. Pouze tato část textu se stane klikací.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var textShape = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 600, 50, false);
textShape.AddTextFrame("Aspose: File Format APIs");
var portionFormat = textShape.TextFrame.Paragraphs[0].Portions[0].PortionFormat;
portionFormat.HyperlinkClick = new Hyperlink("https://www.aspose.com/");
portionFormat.HyperlinkClick.Tooltip = "Explore Aspose file format APIs";
portionFormat.FontHeight = 32;
presentation.Save("presentation-out.pptx", SaveFormat.Pptx);
Přidat URL hyperlinky k tvarům a mediálním rámcům
Pro učinění tvaru nebo rámce klikacím nastavte jeho vlastnost HyperlinkClick. Hyperlink patří objektu samotnému, nikoli textové části uvnitř něj.
Stejný postup platí pro rámečky obrázků, audia a videa: přiřaďte hyperlink k rámci a případně nastavte Tooltip odkazu.
Následující příklad vytvoří klikací obdélník:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var shape = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 600, 50);
shape.HyperlinkClick = new Hyperlink("https://www.aspose.com/");
shape.HyperlinkClick.Tooltip = "Explore Aspose file format APIs";
presentation.Save("presentation-out.pptx", SaveFormat.Pptx);
Použít hyperlinky k vytvoření obsahu
Interní hyperlinky umožňují čtenářům přejít z obsahu na konkrétní snímek. Následující příklad používá SetInternalHyperlinkClick k propojení textu „Page 2“ na první snímku s druhým snímkem.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var firstSlide = presentation.Slides[0];
var secondSlide = presentation.Slides.AddEmptySlide(firstSlide.LayoutSlide);
var tableOfContents = firstSlide.Shapes.AddAutoShape(ShapeType.Rectangle, 40, 40, 300, 100);
tableOfContents.FillFormat.FillType = FillType.NoFill;
tableOfContents.LineFormat.FillFormat.FillType = FillType.NoFill;
tableOfContents.TextFrame.Paragraphs.Clear();
var paragraph = new Paragraph();
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
paragraph.Text = "Title of slide 2 .......... ";
var linkPortion = new Portion();
linkPortion.Text = "Page 2";
linkPortion.PortionFormat.HyperlinkManager.SetInternalHyperlinkClick(secondSlide);
paragraph.Portions.Add(linkPortion);
tableOfContents.TextFrame.Paragraphs.Add(paragraph);
presentation.Save("link_to_slide.pptx", SaveFormat.Pptx);
Formátovat hyperlinky
Barva
Vlastnost ColorSource rozhraní IHyperlink určuje, zda hyperlink používá barvu hyperlinku v prezentaci nebo formátování textové části. Pro použití vlastní barvy textu vyberte HyperlinkColorSource.PortionFormat a nastavte barvu výplně části. Tato funkce byla zavedena ve PowerPointu 2019; starší verze toto nastavení nepoužijí.
Následující příklad přidá dva textové hyperlinky na stejný snímek. První používá červenou výplň textu, zatímco druhý zachovává výchozí barvu hyperlinku.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var coloredShape = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 450, 50, false);
coloredShape.AddTextFrame("This hyperlink uses a custom color.");
var coloredPortionFormat = coloredShape.TextFrame.Paragraphs[0].Portions[0].PortionFormat;
coloredPortionFormat.HyperlinkClick = new Hyperlink("https://www.aspose.com/");
coloredPortionFormat.HyperlinkClick.ColorSource = HyperlinkColorSource.PortionFormat;
coloredPortionFormat.FillFormat.FillType = FillType.Solid;
coloredPortionFormat.FillFormat.SolidFillColor.Color = Color.Red;
var defaultShape = presentation.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 200, 450, 50, false);
defaultShape.AddTextFrame("This hyperlink uses the default color.");
defaultShape.TextFrame.Paragraphs[0].Portions[0].PortionFormat.HyperlinkClick = new Hyperlink("https://www.aspose.com/");
presentation.Save("presentation-out-hyperlink.pptx", SaveFormat.Pptx);
Zvuk
Hyperlink může přehrát zvuk při aktivaci nebo zastavit zvuk, který již přehrává. K nastavení těchto chování použijte následující vlastnosti:
- IHyperlink.Sound určuje audio přidružené k hypertextovému odkazu.
- IHyperlink.StopSoundOnClick řídí, zda aktivace hyperlinku zastaví předchozí zvuk.
Přidat zvuk k hyperlinku
Následující příklad načte sampleaudio.wav a přiřadí jej tlačítku na prvním snímku. Kliknutí na tlačítko přehraje zvuk a přejde na další snímek. Druhý tvar na tomto snímku po kliknutí zastaví předchozí zvuk, aniž by provedl akci navigace.
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var audioData = File.ReadAllBytes("sampleaudio.wav");
var hyperlinkSound = presentation.Audios.AddAudio(audioData);
var firstSlide = presentation.Slides[0];
var playButton = firstSlide.Shapes.AddAutoShape(ShapeType.SoundButton, 100, 100, 100, 50);
playButton.HyperlinkClick = Hyperlink.NextSlide;
if (!playButton.HyperlinkClick.StopSoundOnClick && playButton.HyperlinkClick.Sound == null)
{
playButton.HyperlinkClick.Sound = hyperlinkSound;
}
var secondSlide = presentation.Slides.AddEmptySlide(firstSlide.LayoutSlide);
var stopButton = secondSlide.Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 100, 50);
stopButton.HyperlinkClick = Hyperlink.NoAction;
stopButton.HyperlinkClick.StopSoundOnClick = true;
presentation.Save("hyperlink-sound.pptx", SaveFormat.Pptx);
Extrahovat zvuk z hyperlinku
Následující příklad otevře výše vytvořenou prezentaci a načte audio hyperlinku prvního tvaru do paměti pomocí Sound a BinaryData.
using System;
using Aspose.Slides;
using var presentation = new Presentation("hyperlink-sound.pptx");
if (presentation.Slides.Count > 0 && presentation.Slides[0].Shapes.Count > 0)
{
var hyperlink = presentation.Slides[0].Shapes[0].HyperlinkClick;
var sound = hyperlink?.Sound;
if (sound != null)
{
var audioData = sound.BinaryData;
Console.WriteLine($"Extracted {audioData.Length} bytes of hyperlink audio.");
}
else
{
Console.WriteLine("The first shape has no hyperlink sound.");
}
}
else
{
Console.WriteLine("The presentation has no first slide or shape to inspect.");
}
Nastavení Tooltipu a interakce
Po přiřazení hyperlinku k textu nebo tvaru můžete aktualizovat následující vlastnosti IHyperlink:
- Tooltip nastavuje text, který může divák zobrazit jako nápovědu k odkazu.
- TargetFrame určuje cílový rámec v rámci rodičovské sady HTML rámců, pokud je to relevantní.
- History řídí, zda aktivace odkazu přidá jeho cíl do seznamu zhlédnutých hyperlinků.
- HighlightClick určuje, zda je hyperlink zvýrazněn po kliknutí.
Odstranit hyperlinky z prezentací
Použijte GetAnyHyperlinks k sesbírání kontejnerů hyperlinů, včetně odkazů na textové části, před jejich změnou. Následující příklad odebere oba typy aktivace z prvního snímku. Pro odebrání jen jednoho typu zavolejte pouze RemoveHyperlinkClick nebo RemoveHyperlinkMouseOver; odebrání akce kliknutí neodstraní ekvivalentní akci při přejetí myší.
using System;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("pres.pptx");
if (presentation.Slides.Count > 0)
{
var containers = presentation.Slides[0].HyperlinkQueries.GetAnyHyperlinks().ToList();
foreach (var container in containers)
{
container.HyperlinkManager.RemoveHyperlinkClick();
container.HyperlinkManager.RemoveHyperlinkMouseOver();
}
presentation.Save("pres-removed-hyperlinks.pptx", SaveFormat.Pptx);
}
else
{
Console.WriteLine("The presentation has no slides to process.");
}
Pro bezpodmínečné odstranění RemoveAllHyperlinks odebere oba typy aktivace ve vybraném rozsahu jedním voláním. Pro selektivní čištění a zahrnutí hlavních snímků, rozvržení a poznámek viz Report, Sanitize, and Verify Hyperlinks.
Vytvořit kompletní inventář hyperlinů
Před distribucí prezentace inventarizujte její interaktivní akce i webové odkazy. GetAnyHyperlinks vrací objekty IHyperlinkContainer, nikoli plochý seznam řetězců URL. Prohlédněte si jak HyperlinkClick, tak HyperlinkMouseOver u každého kontejneru. Jsou nezávislé: stejný kontejner může expose obě akce, takže kompletní zpráva potřebuje až dva řádky na kontejner.
Skenování jen na úrovni tvarů může vynechat odkazy připojené k textovým částem. Dotazujte se na vhodný rozsah a uchovávejte vrácené kontejnery, abyste je později mohli aktualizovat nebo odstranit jejich akce.
Dotazovat prezentaci, snímek a textové rámce
Rozhraní IHyperlinkQueries je dostupné prostřednictvím IPresentation.HyperlinkQueries, IBaseSlide.HyperlinkQueries a ITextFrame.HyperlinkQueries. Každý rozsah podporuje stejné dotazy:
- GetHyperlinkClicks vrací kontejnery s akcí kliknutí.
- GetHyperlinkMouseOvers vrací kontejnery s akcí při přejetí myší.
- GetAnyHyperlinks vrací kontejnery s jednou nebo oběma akcemi.
Následující příklad vytvoří hyperlink-audit-input.pptx s externím odkazem při kliknutí, souborovým odkazem při přejetí, interní navigací mezi snímky, textovým odkazem při přejetí a akcí makra. Neprovádí žádnou z těchto akcí. Tři dotazy fungují v každém rozsahu; počty popisují kontejnery, ne celkový počet akcí. Rozsah textového rámce vylučuje odkazy vlastního tvaru.
using System;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var destination = presentation.Slides.AddEmptySlide(slide.LayoutSlide);
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 400, 60);
shape.TextFrame.Text = "Click the text to go to slide 2";
shape.HyperlinkManager.SetExternalHyperlinkClick("https://example.com/");
shape.HyperlinkClick.Tooltip = "Public website";
shape.HyperlinkManager.SetExternalHyperlinkMouseOver("file:///C:/private/report.xlsx");
var portionFormat = shape.TextFrame.Paragraphs[0].Portions[0].PortionFormat;
portionFormat.HyperlinkManager.SetInternalHyperlinkClick(destination);
portionFormat.HyperlinkManager.SetExternalHyperlinkMouseOver("https://example.com/help");
var macroButton = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 120, 200, 60);
macroButton.HyperlinkManager.SetMacroHyperlinkClick("ReviewPresentation");
PrintCounts("Presentation", presentation.HyperlinkQueries);
PrintCounts("Slide 1", slide.HyperlinkQueries);
PrintCounts("Text frame", shape.TextFrame.HyperlinkQueries);
presentation.Save("hyperlink-audit-input.pptx", SaveFormat.Pptx);
static void PrintCounts(string scope, IHyperlinkQueries queries)
{
var clickContainers = queries.GetHyperlinkClicks();
var mouseOverContainers = queries.GetHyperlinkMouseOvers();
var allContainers = queries.GetAnyHyperlinks();
Console.WriteLine($"{scope}: click={clickContainers.Count}, mouse-over={mouseOverContainers.Count}, any={allContainers.Count}");
}
Pro tento příklad dotazy na prezentaci a snímek vrátí po třech kontejnerech kliknutí, dva kontejnery při přejetí a tři kontejnery s libovolnou akcí. Dotaz na textový rámec vrátí po jednom kontejneru v každé kategorii.
Klasifikovat akce a cíle
Použijte IHyperlink.ActionType pro interpretaci akce před interpretací jejího cíle. Hodnoty HyperlinkActionType pokrývají více než webovou navigaci:
| Hodnoty | Význam pro audit |
|---|---|
Hyperlink |
Externí hypertextový odkaz; zkontrolujte URL a její schéma. |
JumpSpecificSlide |
Interní navigace na konkrétní snímek. |
JumpFirstSlide, JumpPreviousSlide, JumpNextSlide, JumpLastSlide, JumpLastViewedSlide |
Vestavěná navigace prezentace, řešená v kontextu prezentace. |
JumpEndShow, StartCustomSlideShow |
Ukončit aktuální prezentaci nebo spustit vlastní prezentaci. |
StartMacro |
Spustit makro. |
StartProgram |
Spustit program. |
OpenFile, OpenPresentation |
Otevřít soubor nebo jinou prezentaci; kontrolovat odděleně od webových URL. |
StartStopMedia |
Spustit nebo zastavit přehrávání média. |
NoAction, Unknown |
Žádná navigační akce nebo neznámá akce vyžadující revizi. |
Čtěte externí cíle z ExternalUrl a konkrétní interní cíle z TargetSlide. Interní akce a vestavěné příkazy mohou nemít externí URL; prázdná URL neznamená, že kontejner nemá akci. Zachovejte ExternalUrlOriginal, pokud se liší od normalizované URL, a zahrňte Tooltip, pokud je dostupný.
Report, Sanitize, and Verify Hyperlinks
Následující příklad .NET 6+ načte existující prezentaci (použijte soubor vytvořený výše), zapíše hyperlink-audit.json, použije politiku, uloží hyperlink-sanitized.pptx a znovu ji otevře, aby znovu zkontroloval oba typy aktivace. Nejprve sbírá kontejnery před jejich změnou a používá referenční rovnost, aby se zabránilo dvojitému zpracování stejného kontejneru. Dotazy na prezentaci zahrnují běžné snímky; pro inventář celého balíčku také výslovně dotazují hlavní snímky, rozvržení, poznámky a hlavní snímky poznámek a podkladových listů, pokud jsou přítomny.
Zpráva zaznamenává jednorozměrný index snímku a SlideId, pokud je dostupný. ISlideComponent.Slide poskytuje vlastní snímek pro podporované kontejnery. Hlavní snímky, rozvržení a poznámky nemají běžný index snímku a jsou identifikovány podle svého rozsahu. Kontejnery tvarů a kontejnery formátování textových částí jsou označeny odděleně; ostatní typy kontejnerů si zachovávají název svého runtime typu. Každý kontejner dostane lokální ID zprávy, aby jeho dvě akce mohly být propojeny.
Tato úmyslně restriktivní politika aplikace umožňuje pouze absolutní HTTPS URL a platné interní cíle snímků. Odmítá makra, programy, souborové akce, jiné akce prezentace, neznámé akce a jiné schémata URL. Tato odmítnutí jsou rozhodnutí politiky, nikoli bezpečnostní verdikt Aspose.Slides. Pouze HTTPS nezaručuje důvěru: přidejte seznam povolených hostitelů a další kontroly pro vaši aplikaci. Kontrolovány jsou jak původní, tak normalizované externí URL. Příklad audituje metadata bez následování odkazů nebo spouštění akcí.
Pro nápravu podporuje HyperlinkManager kontejneru SetExternalHyperlinkClick, RemoveHyperlinkClick a RemoveHyperlinkMouseOver. Zde jsou zakázané externí odkazy na kliknutí nahrazeny pevnou HTTPS vstupní stránkou; ostatní zakázané kliknutí a zakázané akce při přejetí jsou odstraněny samostatně. Nastavte replaceExternalClicks na false pro odstranění všech porušení politiky. Před nasazením vyberte stránku nahrazující aplikaci.
Exportní příznak zprávy používá konzervativní politiku revize PDF: označuje akce při přejetí a vše kromě externího odkazu nebo konkrétního skoku snímku jako potenciálně nepodporované. Je to pouze vodítko k revizi, ne test schopností ani záruka, že neoznačené odkazy přežijí export. Podporované exporty do PDF a HTML mohou zachovat hyperlinky, v závislosti na akci, možnostech exportu a prohlížeči. Rasterové obrázky a video nemohou zachovat interaktivní hyperlinky; při auditu pro tyto výstupy označte každou akci.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using Aspose.Slides;
using Aspose.Slides.Export;
const bool replaceExternalClicks = true;
const string replacementUrl = "https://example.com/blocked-link";
using var presentation = new Presentation("hyperlink-audit-input.pptx");
var containers = CollectContainers(presentation);
var rows = new List<object>();
for (var index = 0; index < containers.Count; index++)
{
var container = containers[index];
AddRow(container.HyperlinkClick, "click", container, index + 1);
AddRow(container.HyperlinkMouseOver, "mouse-over", container, index + 1);
}
var jsonOptions = new JsonSerializerOptions { WriteIndented = true };
var json = JsonSerializer.Serialize(rows, jsonOptions);
File.WriteAllText("hyperlink-audit.json", json);
foreach (var container in containers)
{
var click = container.HyperlinkClick;
if (PolicyViolation(click) != null)
{
if (replaceExternalClicks && click.ActionType == HyperlinkActionType.Hyperlink)
{
container.HyperlinkManager.SetExternalHyperlinkClick(replacementUrl);
}
else
{
container.HyperlinkManager.RemoveHyperlinkClick();
}
}
if (PolicyViolation(container.HyperlinkMouseOver) != null)
{
container.HyperlinkManager.RemoveHyperlinkMouseOver();
}
}
presentation.Save("hyperlink-sanitized.pptx", SaveFormat.Pptx);
using var reopened = new Presentation("hyperlink-sanitized.pptx");
var remainingContainers = CollectContainers(reopened);
var violations = 0;
foreach (var container in remainingContainers)
{
if (PolicyViolation(container.HyperlinkClick) != null) violations++;
if (PolicyViolation(container.HyperlinkMouseOver) != null) violations++;
}
Console.WriteLine($"Audit rows: {rows.Count}; prohibited actions after reopening: {violations}");
if (violations != 0)
{
Console.WriteLine("Verification failed: do not distribute the saved presentation.");
Environment.ExitCode = 1;
}
void AddRow(IHyperlink? link, string activation, IHyperlinkContainer container, int containerId)
{
if (link == null) return;
var ownerSlide = (container as ISlideComponent)?.Slide;
var targetSlide = link.TargetSlide;
var violation = PolicyViolation(link);
var ownerType = container is IShape ? "Shape" : container is IPortionFormat ? "Text portion" : container.GetType().Name;
var ordinaryAction = link.ActionType == HyperlinkActionType.Hyperlink || link.ActionType == HyperlinkActionType.JumpSpecificSlide;
rows.Add(new
{
ContainerId = containerId,
SlideIndex = SlideIndex(presentation, ownerSlide),
SlideId = ownerSlide?.SlideId,
Scope = ownerSlide?.GetType().Name,
OwnerType = ownerType,
Activation = activation,
ActionType = link.ActionType.ToString(),
ExternalUrl = link.ExternalUrl,
TargetSlideIndex = SlideIndex(presentation, targetSlide),
TargetSlideId = targetSlide?.SlideId,
Tooltip = link.Tooltip,
OriginalExternalUrl = link.ExternalUrlOriginal != link.ExternalUrl ? link.ExternalUrlOriginal : null,
PotentiallyUnsafe = violation != null,
PolicyViolation = violation,
TargetExport = "PDF",
PotentiallyUnsupportedByExport = activation == "mouse-over" || !ordinaryAction
});
}
static int? SlideIndex(IPresentation presentation, IBaseSlide? slide)
{
for (var index = 0; index < presentation.Slides.Count; index++)
{
if (ReferenceEquals(presentation.Slides[index], slide)) return index + 1;
}
return null;
}
static string? PolicyViolation(IHyperlink? link)
{
if (link == null) return null;
if (link.ActionType == HyperlinkActionType.JumpSpecificSlide)
{
return link.TargetSlide == null ? "Missing target slide" : null;
}
if (link.ActionType != HyperlinkActionType.Hyperlink) return "Action is not allowed";
if (!IsHttps(link.ExternalUrl)) return "Normalized URL is not absolute HTTPS";
var original = link.ExternalUrlOriginal;
if (!string.IsNullOrEmpty(original) && !IsHttps(original)) return "Original URL is not absolute HTTPS";
return null;
}
static bool IsHttps(string? value)
{
return Uri.TryCreate(value, UriKind.Absolute, out var uri) && uri.Scheme == Uri.UriSchemeHttps;
}
static List<IHyperlinkContainer> CollectContainers(IPresentation presentation)
{
var found = new List<IHyperlinkContainer>();
found.AddRange(presentation.HyperlinkQueries.GetAnyHyperlinks());
foreach (var master in presentation.Masters) AddScope(master);
foreach (var layout in presentation.LayoutSlides) AddScope(layout);
foreach (var slide in presentation.Slides) AddScope(slide.NotesSlideManager.NotesSlide);
AddScope(presentation.MasterNotesSlideManager.MasterNotesSlide);
AddScope(presentation.MasterHandoutSlideManager.MasterHandoutSlide);
return found.Distinct<IHyperlinkContainer>(ReferenceEqualityComparer.Instance).ToList();
void AddScope(IBaseSlide? slide)
{
if (slide != null) found.AddRange(slide.HyperlinkQueries.GetAnyHyperlinks());
}
}
S výše vytvořeným vstupem zpráva obsahuje pět řádků akcí. Odkaz na soubor při přejetí a kliknutí makra jsou odstraněny, zatímco HTTPS odkazy a interní navigace mezi snímky zůstávají. Ověřování vypíše nula zakázaných akcí. Vstup obsahující zakázané externí URL při kliknutí také využívá větev nahrazení. Kontejner s povoleným kliknutím a zakázaným přejetím si ponechává akci kliknutí.
Toto selektivní čištění se liší od RemoveAllHyperlinks, který odstraní oba typy aktivace ve vybraném rozsahu bez ohledu na politiku. Ověření zde kontroluje pouze akce hyperlinků; neodstraňuje vložené projekty VBA, OLE objekty ani jiný aktivní obsah a neověřuje exportovaný PDF nebo HTML soubor.
Často kladené otázky
Jak mohu odkazovat na sekci nebo její první snímek?
Sekce v PowerPointu seskupují snímky, ale interní hypertextový odkaz cílí na jednotlivý snímek. Pro vytvoření navigace na sekci odkažte na první snímek v dané sekci.
Mohu přiřadit hypertextový odkaz k prvkům hlavního snímku tak, aby fungoval na všech snímcích?
Ano. Prvky hlavního snímku a rozvržení podporují hyperlinky. Odkazy na těchto prvcích jsou dostupné během prezentace na snímcích, které používají odpovídající hlavní snímek nebo rozvržení.
Zůstanou hypertextové odkazy zachovány při exportu do PDF, HTML, obrázků nebo videa?
Podporované exporty do PDF a HTML mohou zachovat hyperlinky; rastrové obrázky a video nemohou. Viz exportní úvahy v Zpráva, sanitizace a ověření hyperlinů.