Troca de anotações via C ABI nativa do Linux
hpdf_document_execute_json_v1 expõe annotations.export e annotations.import através do descritor versionado de operações existente e das interfaces de IO por callbacks
Carregue o PDF no contexto do documento primeiro; o import de anotações usa InputIO para os bytes XFDF, OutputIO para o PDF salvo e ResultIO para os metadados de resultado JSON
{"schemaVersion":1,"type":"annotations.export","format":"xfdf"}
O export grava XFDF UTF-8 no OutputIO e reporta annotationCount, skippedAnnotationCount, decodedAttachmentBytes e outputBytes
{"schemaVersion":1,"type":"annotations.import","format":"xfdf",
"annotationLimits":{"maxBytes":1048576,"maxAnnotations":1000,
"maxNodes":100000,"maxDepth":32,"maxWorkingBytes":67108864}}
O import reporta updated e annotationProfile, e depois adota a revisão salva somente depois que os callbacks de PDF e de resultado tiverem sucesso
Falhas de callbacks de entrada/saída, falhas do callback de resultado e cancelamento preservam o contexto exato commitado anteriormente; callbacks externos podem já ter recebido um stream parcial antes de uma falha posterior de callback
O JSON de capability anuncia annotationData com o perfil de tipos mapeado, modo de import append, dados embutidos, replies para frente e objetos popup; appearanceImport é false
Os limites de anotações podem reduzir as capacidades da operação e não podem aumentá-las; MaxBytes também é limitado pela memória da operação dividida por 64, o armazenamento de trabalho por metade da memória da operação, e os bytes de export pelo limite de saída
O import aceita o objeto signaturePolicy existente para configurações de verificação CAdES, confiança e timestamp, e aplica as permissões de anotações e a política DocMDP autenticada
Imports ABI vazios retêm os bytes commitados do PDF enquanto retornam zero atualizações
Destinos locais nomeados e explícitos e actions GoTo preservam referências reais de páginas e coordenadas decimais exatas delimitadas através do codec compartilhado de anotações
O ELF SONAME e a versão de símbolos HOTPDF_1.0 permanecem inalterados, e os consumers C existentes continuam usando o mesmo descritor público de operações
Perfil mapeado e API nativa · C ABI do Linux · Operações de form data
Transporte de aparências padrão de stamps preserva streams reais de Forms e recursos acíclicos delimitados de fontes, imagens e gráficos por meio de typed XML em base64
Operações de grafos de objetos FDF
{"schemaVersion":1,"type":"annotations.import","format":"fdf"}
Selecione format="fdf" para grafos de anotações binários pelo mesmo descritor de operação e callbacks InputIO, OutputIO e ResultIO; annotations.export escreve bytes FDF no OutputIO
O perfil FDF preserva recursos AP e RO fornecidos, objetos indiretos compartilhados e referências contextuais de páginas GoTo locais; um NM de anotação correspondente na mesma página identifica uma substituição, enquanto anotações sem nome ou sem correspondência são anexadas
Import FDF bem-sucedido reporta annotationProfile="pdf-object-graph-v1" e uma contagem updated inteira; uma operação sem mudanças preserva os exatos últimos bytes commitados do PDF
FDF annotationLimits também aceita maxObjects; todos os limites permanecem restringidos pela operação envolvente, com falha e cancelamento retendo as garantias existentes de transações de callbacks
Operações apenas de anotações rejeitam Fields não vazios e Differences embutidos; dados de actions são transportados sem executá-los
Veja comportamento e fronteiras do grafo FDF e limites FDF nativos
Remoção de anotações
{"schemaVersion":1,"type":"annotations.remove","annotations":[{"page":0,"name":"review-note"}]}
annotations.remove usa o documento atual ou um PDF independente fornecido pelo InputIO e depois publica o PDF no OutputIO e o JSON no ResultIO antes de commitar o contexto
O resultado reporta removed e annotationProfile="page-and-nm-removal-v1"; annotationLimits delimita contagem de anotações, operações, bytes de nomes e armazenamento de trabalho
Falha ou cancelamento preserva o contexto commitado; callers fazem stage dos sinks de callbacks eles mesmos porque bytes já escritos não podem ser retraídos