使用 JavaScript 及 C++ 添加数字签名到已签名的 Excel 文件
Contents
[
Hide
]
可能的使用场景
通过 C++ 及 Aspose.Cells for JavaScript 提供的 Workbook.addDigitalSignature(digitalSignatureCollection) 方法,可以向已签名的 Excel 文件添加数字签名
在为已签名的Excel文档添加数字签名时请注意,如果原始文档由Aspose.Cells生成,则效果良好。但如果由其他引擎(如Microsoft Excel等)生成,Aspose.Cells在加载和重新保存后可能无法保持文件一致,从而使原始签名无效。
如何向已经签名的Excel文件添加数字签名
以下示例代码演示了如何使用Workbook.addDigitalSignature(digitalSignatureCollection)方法为已签名的Excel文件添加数字签名。请查看此代码使用的示例Excel文件,该文件已进行数字签名。然后查看由代码生成的输出Excel文件。在此代码中使用了名为AsposeDemo.pfx的演示证书,密码为aspose。截图显示了示例代码执行后对示例Excel文件的效果。

示例代码
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Add Digital Signature Example</title>
</head>
<body>
<h1>Add Digital Signature to Workbook</h1>
<p>Select an Excel file and a PFX certificate, enter the certificate password, then click "Add Digital Signature".</p>
<input type="file" id="fileInput" accept=".xls,.xlsx" />
<br/><br/>
<input type="file" id="certInput" accept=".pfx" />
<br/><br/>
<label for="certPassword">Certificate Password:</label>
<input type="password" id="certPassword" value="aspose" />
<br/><br/>
<button id="runExample">Add Digital Signature</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, DigitalSignature, DigitalSignatureCollection, SaveFormat, Utils } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const certInput = document.getElementById('certInput');
const passwordInput = document.getElementById('certPassword');
const resultDiv = document.getElementById('result');
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
if (!certInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select a .pfx certificate file.</p>';
return;
}
// Read files as ArrayBuffer
const excelFile = fileInput.files[0];
const certFile = certInput.files[0];
const certPassword = passwordInput.value;
const excelArrayBuffer = await excelFile.arrayBuffer();
const certArrayBuffer = await certFile.arrayBuffer();
// Instantiate Workbook from uploaded Excel file
const workbook = new Workbook(new Uint8Array(excelArrayBuffer));
// Create the digital signature collection
const dsCollection = new DigitalSignatureCollection();
// Create new digital signature and add it in digital signature collection
// Using certificate bytes (Uint8Array), password, comment and signing date
const signature = new DigitalSignature(new Uint8Array(certArrayBuffer), certPassword, "Aspose.Cells added new digital signature in existing digitally signed workbook.", new Date());
dsCollection.add(signature);
// Add digital signature collection inside the workbook
workbook.addDigitalSignature(dsCollection);
// Save the workbook and provide download link
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'outputDigitallySignedByCells.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Digitally Signed Excel File';
// Dispose the workbook
workbook.dispose();
resultDiv.innerHTML = '<p style="color: green;">Digital signature added successfully! Click the download link to get the signed file.</p>';
});
</script>
</html>