Fluxo PDF no navegador
Leia um PDF, monte o template de posicionamento A1 e assine com os helpers de navegador.
Os helpers de navegador são a ponte tipada entre um input de arquivo e o estado do builder PDF. Eles mantêm bytes no Effect, produzem um template de posicionamento validado e assinam o campo selecionado com a layer A1 fornecida.
Passos
readBrowserFileBytes(file) transforma um Blob do navegador em Uint8Array dentro do canal de erro tipado.createBrowserPdfSignatureBuilderState(...) lê dimensões das páginas, cria o template e opcionalmente posiciona um campo draft.PdfSignatureBuilderStore uma vez e deixe sua app assinar esse estado na fronteira React/Vue/Svelte que ela já usa.signBrowserPdf(...) transforma o campo selecionado em aparência PDF e delega criptografia para Signatures.import { a1SignaturesLayer } from "@signature-kit/a1/signer"
import {
createBrowserPdfSignatureBuilderState,
readBrowserFileBytes,
signBrowserPdf,
} from "@signature-kit/pdf/browser"
import { createPdfSignatureBuilderStore } from "@signature-kit/pdf/builder-store"
import { Effect, Redacted } from "effect"
const pdf = await Effect.runPromise(readBrowserFileBytes(file))
const state = await Effect.runPromise(
createBrowserPdfSignatureBuilderState({
id: "contract-a1",
name: file.name,
documentId: "contract",
documentName: file.name,
pdf,
role: { id: "signer", label: "Signer A1", required: true },
draft: { id: "sig", type: "signature", roleId: "signer", width: 156, height: 42 },
autoPlacement: { page: "last", slot: "bottom-right", margin: 24 },
}),
)
const store = createPdfSignatureBuilderStore(state)
const signedPdf = await Effect.runPromise(
signBrowserPdf({
pdf,
template: store.getSnapshot().template,
fieldId: "sig",
reason: "Assinado localmente com A1",
signatureLength: 16384,
}).pipe(
Effect.provide(a1SignaturesLayer({ pfx, password: Redacted.make(password) })),
),
)Assinatura em lote
Use signBrowserPdfBatch(items, callbacks) quando um certificado A1 assina muitos PDFs. Ele roda em sequência com concurrency: 1, captura falhas por documento como valores de resultado e impede que um documento ruim aborte o lote.
Relacionados
Primeiro Uso
Carregue um certificado A1, inspecione a identidade e assine seus primeiros bytes — depois um XML e um PDF — em um único programa Effect.
Modelo mental
O modelo mental por trás do SignatureKit: fronteira de assinatura, runtime Effect, formatos de documento, A1 no navegador e requests remotos.