Inspectie van de actiegraaf en GoToE-navigatie

THPDFActionBuilder maakt PDF 1.6 GoToE-acties aan voor bestemmingen binnen ingebedde of gerelateerde PDF-documenten, terwijl de geladen-actie-API alle 18 standaard PDF-actiesubtypes leest zonder ze uit te voeren

GoToE-bouwers

class function GoToEmbeddedNamedDestination(
  const RootFileName, DestinationName: AnsiString;
  const TargetPath: array of THPDFEmbeddedTarget;
  NewWindow: boolean = false): THPDFActionBuilder;

class function GoToEmbeddedPage(
  const RootFileName: AnsiString;
  TargetPageIndex: Integer;
  const TargetPath: array of THPDFEmbeddedTarget;
  FitMode: THPDFDestinationFitMode = dfmFit;
  Left: Single = 0; Top: Single = 0;
  Right: Single = 0; Bottom: Single = 0;
  Zoom: Single = 0; NewWindow: boolean = false): THPDFActionBuilder;

Bouw elk item van het doelpad met HPDFEmbeddedParentTarget, HPDFEmbeddedFileTarget of een HPDFEmbeddedAnnotationTarget-overload

Een kind dat via de EmbeddedFiles-naamstructuur wordt geselecteerd schrijft /R /C plus /N, terwijl een bijlage-annotatiekind /R /C plus het vereiste /P- en /A-paar schrijft

Ouderitems schrijven alleen /R /P, geneste items worden recursieve /T-woordenboeken, en een lege RootFileName vereist een niet-leeg doelpad

Delphi-voorbeeld

var
  Action: THPDFActionBuilder;
  Targets: THPDFEmbeddedTargetArray;
begin
  SetLength(Targets, 2);
  Targets[0] := HPDFEmbeddedFileTarget('chapter.pdf');
  Targets[1] := HPDFEmbeddedParentTarget;
  Action := THPDFActionBuilder.GoToEmbeddedNamedDestination(
    'containers\root.pdf', 'EmbeddedStart', Targets, True);
  try
    HotPDF.CurrentPage.SetAnnotationAction(Annot, Action);
  finally
    Action.Free;
  end;
end;

Geladen actiegraaf

function GetLoadedActionChain(ActionObject: THPDFObject): THPDFLoadedActionInfoArray;
function GetLoadedOpenActionChain: THPDFLoadedActionInfoArray;
function GetLoadedDocumentActionChain(ActionType: THPDFActionScriptType): THPDFLoadedActionInfoArray;
function GetLoadedPageActionChain(PageIndex: Integer; Trigger: THPDFPageActionTrigger): THPDFLoadedActionInfoArray;
function GetLoadedAnnotationPrimaryActionChain(PageIndex, AnnotationIndex: Integer): THPDFLoadedActionInfoArray;
function GetLoadedAnnotationActionChain(PageIndex, AnnotationIndex: Integer; Trigger: THPDFAnnotationActionTrigger): THPDFLoadedActionInfoArray;
function GetLoadedFormFieldActionChain(FieldIndex: Integer; Trigger: THPDFFormFieldActionTrigger): THPDFLoadedActionInfoArray;
function GetLoadedOutlineActionChain(OutlineIndex: Integer): THPDFLoadedActionInfoArray;

De geretourneerde array volgt de uitvoeringsvolgorde: de ouderactie verschijnt eerst, gevolgd door elk /Next-woordenboek- of arraylid in een geordende diepte-eerst-volgorde

THPDFLoadedActionInfo.Kind identificeert GoTo, GoToR, GoToE, Launch, Thread, URI, Sound, Movie, Hide, Named, SubmitForm, ResetForm, ImportData, JavaScript, SetOCGState, Rendition, Trans of GoTo3DView

Kernoperanden worden gedecodeerd naar bestemmings-, bestands-, URI-, JavaScript-, doel-, bewerkings-, vlag-, volume-, optioneel-boolean- en gerelateerd-objectvelden

NewWindow gebruikt obAbsent, obFalse of obTrue zodat een ontbrekende waarde onderscheiden blijft van een expliciete waarde false

De lezer voert nooit een actie uit en volgt nooit een onbegrensde graaf

Onjuist gevormde items, cycli, herhaalde gedeelde knooppunten, diepte boven 64, knooppuntaantal boven 4096 en te grote /Next-arrays retourneren diagnostische records via Malformed en Issue

Triggers voor annotatiezichtbaarheid

THPDFAnnotationActionTrigger en THPDFAnnotationJavaScriptTrigger bevatten pagina-open /PO, pagina-sluit /PC, pagina-zichtbaar /PV en pagina-onzichtbaar /PI-items

Deze vier triggers onderhandelen PDF 1.5, terwijl de bestaande muis- en focusactietriggers hun eerdere versie-eisen behouden

Zie ook