62 lines
2.3 KiB
JavaScript
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);
|