Windows annotation XFDF exchange

Windows-filjobb och hpdf_document_execute_json_v1 exporterar mappade annoteringar och lägger till XFDF-annoteringar genom den autentiserade Windows-transaktionsbryggan

De mappade typerna och egenskaperna delas med nativt annoterings-XFDF, inklusive avgränsade binära bilaga/ljud-strömmar, Unicode rich-innehåll, popup-objekt och framåtsvar

Filjobb

{
  "schemaVersion": 1, "type": "annotations.import", "format": "xfdf",
  "input": "source.pdf", "annotationInput": "annotations.xfdf",
  "output": "annotated.pdf", "password": "owner",
  "annotationLimits": {"maxBytes": 1048576, "maxAnnotations": 1000},
  "budget": {"memoryBytes": 268435456, "outputBytes": 134217728,
    "timeMilliseconds": 60000, "resultBytes": 16777216}
}

annotations.export använder samma format, indata, utdata och valfritt lösenord och skriver UTF-8 XFDF i stället för en PDF; import kräver annotationInput

Utdata får inte aliasa PDF-indatan, XFDF-indatan eller tillhandahållna förtroende-/bevisfiler, inklusive en befintlig hårdlänk; publiceringen reserverar en exklusiv temporär syskonfil, validerar avgränsade resultat, spolar och stänger kandidaten och ersätter därefter målet atomärt

Fel och avbrott bevarar ett befintligt completa mål och tar bort operationens temporära fil

Ursprungliga V1-återanrop

Använd de oförändrade hpdf_operation_v1 och hpdf_io_v1 från hotpdf_abi.h; annoteringsutbyte kräver ingen typsnittsutvidgning

Läs in mål-PDF:n med hpdf_document_load_from_io först; import läser XFDF ur InputIO, skriver kandidat-PDF:n till OutputIO och skriver avgränsad JSON till ResultIO; export läser den aktiva ägda PDF:n och skriver XFDF till OutputIO

För krypterad indata, upprepa det operationslösenord som användes för att autentisera den inlästa PDF:n; operationen behåller inget implicit lösenord från det tidigare inläsningsanropet

Endast lyckade PDF- och resultatåteranrop följda av den slutliga avbrottskontrollpunkten adopterar det nya dokumentet och ägda revisionen; misslyckade indata-, utdata- eller resultatåteranrop, felformad XML, uttömda gränser och avbrott behåller den tidigare kontexten

Återanrop kan mottaga kandidatbyte före ett senare fel; publicera en anroparägd destination först efter att HPDF_STATUS_OK returnerat

Policy, gränser och resultat

Import autentiserar befintlig signaturintegritet och ESS-signerarens bindning; P1- och P2-certifiering nekar annoteringsändringar, medan P3 tillåter en annoteringsrevision som behåller de ursprungliga signerade bytena

AES-256 R5/R6-importer bevarar krypteringsparametrar och det ursprungliga revisionsprefixet; en tom import autentiserar policy och behåller de exakta aktuella bytena

signaturePolicy accepterar de befintliga Boolean-förtroende-/tidsstämpel-/spärrkraven och explicita förtroendesökvägar som beskrivs i Windows-formulärdatautbyte

annotationLimits kan sänka maxBytes, maxAnnotations, maxNodes, maxDepth och maxWorkingBytes; värden är positiva heltals-JSON-tal och kan inte höja de beräknade standarderna

Arbets-, utdata-, resultat-, objekt- och sidbudgetar gäller också; återanropsoperationer accepterar elapsedMilliseconds som en ytterligare stramare tidsgräns

Export rapporterar annotationCount, skippedAnnotationCount, decodedAttachmentBytes och outputBytes; import rapporterar updated, outputBytes och annotationProfile lika med mapped-annotations-v1

Gränser

Kapabiliteter annonserar annoteringsutbyte genom file-job och execute-json-v1, med enbart-tillägg-import, allmän appearanceImport=false och avgränsad stampAppearanceImport=true

Standard stämpelutseende-transport bevarar faktiska Form-strömmar och avgränsade cykelfria typsnitts-, bild- och grafikresurser via base64-typad XML

Geometriska och textuella annoteringsimporter transporterar eller syntetiserar inte godtyckliga AP-strömmar; annoteringsersättning/borttagning, externa destinationer, bredare åtgärder och FDF-annoteringsdata förblir separat arbete; lokala namngivna/explicita destinationer och GoTo-åtgärder använder den gemensamma avgränsade codecen

Den generiska ExecuteLoadedOperation och den äldre jobbhandle-återanropsposten är separata ingångspunkter; Pascal-anropare kan använda den explicita transaktionsklassen