Files
cybercore-signer/sdk/examples/03-sign-pades.js
T

62 lines
2.3 KiB
JavaScript

/**
* Exemplo 03: Assinatura de PDF Completo PAdES com Selo Visual
*
* Demonstra como assinar um arquivo PDF aplicando o selo gráfico ICP-Brasil ou Gov.br
* estilizado pelo CyberCore Signer, retornando o PDF assinado completo em Base64/Blob.
*/
import { CyberCoreSigner } from '@cybercore/signer-sdk';
async function main() {
const signer = new CyberCoreSigner({
applicationName: 'Assinador de Contratos Online'
});
await signer.connect();
// 1. Consulta os temas de selos visuais disponíveis no agente
const themesResp = await signer.getSealThemes();
console.log('Selo padrão configurado:', themesResp.default_seal_id);
console.log('Temas disponíveis:', themesResp.seals.map(s => s.name).join(', '));
// 2. Mock de um PDF de teste (no navegador, normalmente é obtido via <input type="file">)
const fakePdfContent = Buffer.from('%PDF-1.4\n1 0 obj\n<< /Type /Catalog >>\nendobj\n%%EOF');
const certs = await signer.getCertificates();
if (certs.length === 0) {
console.error('Nenhum certificado para assinatura.');
return;
}
// 3. Executa a assinatura com estampa gráfica posicionada no rodapé da última página
console.log('Enviando solicitação de assinatura PAdES...');
const result = await signer.signPdfDocument({
pdf: fakePdfContent,
certificateId: certs[0].id,
documentName: 'contrato_prestacao_servicos.pdf',
position: 'BOTTOM_RIGHT',
pageChoice: 'LAST_PAGE',
scale: 1.0,
visibleSeal: true,
sealThemeId: 'icp-brasil',
reason: 'Concordância integral com os termos do contrato',
location: 'Brasília - DF',
cpfDisplayMode: 'MASKED', // Exibe CPF mascarado no carimbo (ex: ***.456.789-**)
includeDateTime: true,
customExtraInfo: 'Matrícula: 55420-9'
});
console.log('PDF assinado com sucesso!');
console.log('Titular:', result.subjectName);
console.log('CPF/CNPJ:', result.subjectCpfCnpj);
console.log('Tamanho do PDF assinado:', result.signedPdf.length, 'caracteres Base64');
// No navegador web, você pode invocar diretamente:
// result.download('contrato_assinado.pdf');
// Ou obter os bytes binários para envio via fetch/multipart:
const pdfBytes = result.getSignedPdfBytes();
console.log('Bytes binários gerados:', pdfBytes.length);
}
main().catch(console.error);