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