Assinar PDF com Carimbo usando API REST em Node.js

A assinatura do carimbo permite assinar eletronicamente documentos PDF da mesma forma que usamos um carimbo de assinatura de borracha em um documento em papel. Podemos assinar documentos PDF com uma assinatura de carimbo personalizada programaticamente na nuvem. Neste artigo, aprenderemos como assinar documentos PDF com assinaturas de carimbo usando uma API REST no Node.js.

Os seguintes tópicos serão abordados neste artigo:

API REST de assinatura em PDF e SDK Node.js

Para assinar documentos PDF, usaremos a API Node.js SDK of GroupDocs.Signature Cloud. Ele nos permite criar, verificar e pesquisar vários tipos de assinaturas, como imagem, código de barras, QR-Code, assinaturas de texto, digitais e de carimbo. Instale-o usando o seguinte comando no console:

npm install groupdocs-signature-cloud

Por favor, obtenha seu ID e Segredo do cliente no painel antes de seguir as etapas mencionadas. Depois de ter seu ID e segredo, adicione o código conforme mostrado abaixo:

// Este exemplo de código demonstra como adicionar o ID e o segredo do cliente ao código.
global.clientId = "112f0f38-9dae-42d5-b4fc-cc84ae644972";
global.clientSecret = "16ad3fe0bdc39c910f57d2fd48a5d618";
global.myStorage = "";

const config = new groupdocs_signature_cloud.Configuration(clientId, clientSecret);
config.apiBaseUrl = "https://api.groupdocs.cloud";

Assinar documentos PDF usando uma API REST em Node.js

Podemos assinar documentos PDF na nuvem seguindo as etapas simples abaixo:

Carregue o Documento

Em primeiro lugar, faremos o upload do documento PDF para a nuvem usando o exemplo de código abaixo:

// Este exemplo de código demonstra como carregar um arquivo PDF para a nuvem.
// Abra o arquivo no IOStream do local/disco.
var resourcesFolder = 'C:\\Files\\Signature\\sample.pdf';
fs.readFile(resourcesFolder, (err, fileStream) => {
  // Construir FileApi
  var fileApi = groupdocs_signature_cloud.FileApi.fromConfig(config);
  // Subir arquivo
  var request = new groupdocs_signature_cloud.UploadFileRequest("sample.pdf", fileStream, myStorage);
  fileApi.uploadFile(request);
});

Como resultado, o arquivo PDF carregado estará disponível na seção de arquivos do painel na nuvem.

Assinar documentos PDF com assinaturas de carimbo usando Node.js

Podemos assinar arquivos PDF com assinaturas de carimbo programaticamente seguindo as etapas abaixo:

  • Crie uma instância do SignApi.
  • Forneça o caminho do arquivo PDF carregado.
  • Inicialize o objeto SignDigitalOptions e defina várias propriedades.
  • Defina o texto do carimbo usando objetos StampLine.
  • Atribua o arquivo de entrada, SignDigitalOptions e SaveOptions ao objeto SignSettings.
  • Por fim, assine o PDF usando o método SignApi.createSignatures().

O exemplo de código a seguir mostra como assinar um documento PDF com assinaturas de carimbo usando uma API REST em Node.js.

// Este exemplo de código demonstra como assinar um documento PDF com assinaturas de carimbo.
// Criar uma instância da API
let signApi = groupdocs_signature_cloud.SignApi.fromKeys(clientId, clientSecret);

// Caminho do arquivo de entrada
let fileInfo = new groupdocs_signature_cloud.FileInfo();
fileInfo.filePath = "sample.pdf";

// Definir opções de carimbo de sinal
let opts = new groupdocs_signature_cloud.SignStampOptions();
opts.signatureType = groupdocs_signature_cloud.OptionsBase.SignatureTypeEnum.Stamp;

// Definir posição e tamanho do carimbo em uma página
opts.left = 200;
opts.top = 400;
opts.width = 300;
opts.height = 300;
opts.locationMeasureType = groupdocs_signature_cloud.SignTextOptions.LocationMeasureTypeEnum.Pixels;
opts.sizeMeasureType = groupdocs_signature_cloud.SignTextOptions.SizeMeasureTypeEnum.Pixels;
opts.rotationAngle = 0;
opts.horizontalAlignment = groupdocs_signature_cloud.SignTextOptions.HorizontalAlignmentEnum.None;
opts.verticalAlignment = groupdocs_signature_cloud.SignTextOptions.VerticalAlignmentEnum.None;

// Adicionar preenchimento
opts.margin = new groupdocs_signature_cloud.Padding();
opts.margin.all = 5;
opts.marginMeasureType = groupdocs_signature_cloud.SignTextOptions.MarginMeasureTypeEnum.Pixels;

// Definir aparência do carimbo
opts.backgroundCor = new groupdocs_signature_cloud.Cor();
opts.backgroundCor.web = "DarkOrange";
opts.backgroundCorCropType = groupdocs_signature_cloud.SignStampOptions.BackgroundCorCropTypeEnum.OuterArea;
opts.backgroundImageCropType = groupdocs_signature_cloud.SignStampOptions.BackgroundImageCropTypeEnum.InnerArea;

// Definir a aparência do texto do 1º Contorno
let outline1 = new groupdocs_signature_cloud.StampLine();
outline1.text = " * Electronically Signed by GroupDocs.Signature * ";
// Fontee
outline1.font = new groupdocs_signature_cloud.SignatureFontee();
outline1.font.fontFamily = "Arial";
outline1.font.fontSize = 11;
outline1.font.bold = true;
outline1.textBottomIntent = 6;
// Cor
outline1.textCor = new groupdocs_signature_cloud.Cor();
outline1.textCor.web = "WhiteSmoke";
outline1.textRepeatType = groupdocs_signature_cloud.StampLine.TextRepeatTypeEnum.FullTextRepeat;
// Cor de fundo
outline1.backgroundCor = new groupdocs_signature_cloud.Cor();
outline1.backgroundCor.web = "DarkSlateBlue";
outline1.height = 22;
outline1.visible = true;

// Definir a aparência do texto do segundo contorno
let outline2 = new groupdocs_signature_cloud.StampLine();
outline2.height = 2;
outline2.backgroundCor = new groupdocs_signature_cloud.Cor();
outline2.backgroundCor.web = "White";
outline2.visible = true;

// Definir a aparência do texto do 3º Contorno
let outline3 = new groupdocs_signature_cloud.StampLine();
outline3.text = " * GroupDocs.Signature * ";
// Fontee
outline3.font = new groupdocs_signature_cloud.SignatureFontee();
outline3.font.fontFamily = "Arial";
outline3.font.fontSize = 16;
outline3.textBottomIntent = 8;
outline3.textRepeatType = groupdocs_signature_cloud.StampLine.TextRepeatTypeEnum.FullTextRepeat;
// Cor
outline3.textCor = new groupdocs_signature_cloud.Cor();
outline3.textCor.web = "DarkSlateBlue";
// Cor de fundo
outline3.backgroundCor = new groupdocs_signature_cloud.Cor();
outline3.backgroundCor.web = "White";
outline3.height = 30;
// Borda interna
outline3.innerBorder = new groupdocs_signature_cloud.BorderLine();
outline3.innerBorder.color = new groupdocs_signature_cloud.Cor();
outline3.innerBorder.color.web = "DarkSlateBlue";
outline3.innerBorder.style = groupdocs_signature_cloud.BorderLine.StyleEnum.Dot;
outline3.innerBorder.weight = 1.2;
// Borda externa
outline3.outerBorder = new groupdocs_signature_cloud.BorderLine();
outline3.outerBorder.color = new groupdocs_signature_cloud.Cor();
outline3.outerBorder.color.web = "DarkSlateBlue";
outline3.outerBorder.weight = 1.4;
outline3.visible = true;

opts.outerLines = [outline1, outline2, outline3];

// Definir o primeiro texto embutido
let innerline = new groupdocs_signature_cloud.StampLine();
innerline.text = "GroupDocs";

innerline.font = new groupdocs_signature_cloud.SignatureFontee();
innerline.font.fontFamily = "Times New Roman";
innerline.font.fontSize = 20;
innerline.font.bold = true;
innerline.textCor = new groupdocs_signature_cloud.Cor();
innerline.textCor.web = "MediumVioletRed";
innerline.textRepeatType = groupdocs_signature_cloud.StampLine.TextRepeatTypeEnum.None;
innerline.height = 40;
innerline.visible = true;

// Definir o segundo texto embutido
let innerline2 = new groupdocs_signature_cloud.StampLine();
innerline2.text = "Signature";

innerline2.font = new groupdocs_signature_cloud.SignatureFontee();
innerline2.font.fontSize = 20;
innerline2.font.bold = true;
innerline2.textCor = new groupdocs_signature_cloud.Cor();
innerline2.textCor.web = "MediumVioletRed";
innerline2.textRepeatType = groupdocs_signature_cloud.StampLine.TextRepeatTypeEnum.None;
innerline2.height = 40;
innerline2.visible = true;

// Definir o terceiro texto embutido
let innerline3 = new groupdocs_signature_cloud.StampLine();
innerline3.text = "Cloud";

innerline3.font = new groupdocs_signature_cloud.SignatureFontee();
innerline3.font.fontSize = 20;
innerline3.font.bold = true;
innerline3.textCor = new groupdocs_signature_cloud.Cor();
innerline3.textCor.web = "MediumVioletRed";
innerline3.textRepeatType = groupdocs_signature_cloud.StampLine.TextRepeatTypeEnum.None;
innerline3.height = 40;
innerline3.visible = true;

opts.innerLines = [innerline, innerline2, innerline3];

// Página sem onde mostrar o carimbo
opts.page = 1;

// Definir configurações de sinal
let settings = new groupdocs_signature_cloud.SignSettings();
settings.fileInfo = fileInfo;
settings.options = [opts];
settings.saveOptions = new groupdocs_signature_cloud.SaveOptions();
settings.saveOptions.outputFilePath = "signedStamp_One_page.pdf";

// Criar solicitação de assinatura
let request = new groupdocs_signature_cloud.CreateSignaturesRequest(settings);
// Criar assinaturas
let response = await signApi.createSignatures(request);
console.log("Output file link: " + response.downloadUrl);
Assine documentos PDF com assinaturas de carimbo usando Node.js.

Assine documentos PDF com assinaturas de carimbo usando Node.js.

Baixe o arquivo assinado

O exemplo de código acima salvará o arquivo PDF assinado na nuvem. Ele pode ser baixado usando o seguinte exemplo de código:

// Este exemplo de código demonstra como baixar um PDF assinado da nuvem.
// Construir FileApi
var fileApi = groupdocs_signature_cloud.FileApi.fromConfig(config);

// ⇬ Fazer download do arquivo
let request = new groupdocs_signature_cloud.DownloadFileRequest("signedStamp_One_page.pdf", myStorage);
let response = await fileApi.downloadFile(request);

// Mover para a pasta de trabalho
fs.writeFile("C:\\Files\\Signature\\signedStamp_One_page.pdf", response, "binary", function (err) { });

Experimente on-line

Experimente a seguinte ferramenta gratuita de assinatura de documentos on-line, desenvolvida usando a API acima. https://products.groupdocs.app/signature/

Conclusão

Neste artigo, aprendemos:

  • como assinar documentos PDF com assinaturas de carimbo;
  • fazer upload do arquivo PDF para a nuvem;
  • como baixar arquivo PDF assinado da nuvem.

Além disso, você pode aprender mais sobre GroupDocs.Signature Cloud API usando a documentação. Também fornecemos uma seção Referência de API que permite visualizar e interagir com nossas APIs diretamente pelo navegador. Em caso de ambiguidade, sinta-se à vontade para nos contatar no fórum.

Veja também