首先,虽然我关注 StackOverflow 已经有一段时间了,但这是我第一次发帖,所以如果我做错了或不符合规则,请随时指出正确的方向。
我正在开发一个 PDF 数字签名应用程序,使用 iText5,在我准备好签名的 PDF 后,它依赖于外部服务来提供签名的散列。
如iText 文档中所述,在第一阶段我准备了 PDF(在最终实现中,所有 PDF 都可能是多签名的,所以我使用附加模式),如下所示:
public static byte[] GetBytesToSign(string unsignedPdf, string tempPdf, string signatureFieldName, List<Org.BouncyCastle.X509.X509Certificate> certificateChain) {
// we create a reader and a stamper
using (PdfReader reader = new PdfReader(unsignedPdf)) {
using (FileStream baos = File.OpenWrite(tempPdf)) {
List<Org.BouncyCastle.X509.X509Certificate> chain = certificateChain;
PdfStamper pdfStamper = PdfStamper.CreateSignature(reader, baos, '\0', null, true);
sap = pdfStamper.SignatureAppearance;
sap.Certificate = certificateChain[0];
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(36, 720, 160, 780), 1, signatureFieldName);
//sap.SetVisibleSignature(signatureFieldName);
sap.SignDate = DateTime.Now;
PdfSignature dic …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 iText(sharp,版本 5.5.13)创建自定义数字签名,用户可以从一组四个位置(顶部、底部、左侧和右侧)设置图像位置,如下所示:
权利:

左边:

顶部:

底部:

到目前为止,我尝试在签名的第 0 层上工作,但我认为我做错了,因为签名详细信息是在第 2 层中设置的。
然而,这只是设置图像位置的初始草图。在下面的代码中,我加载图像并将其放入一个块中(想法取自此示例)
PdfTemplate pdfTemplate = sap.GetLayer(0);
ColumnText c1 = new ColumnText(pdfTemplate);
Image img = Image.GetInstance(signatureImage);
Phrase elements = new Phrase();
elements.Add(new Chunk(img, 0, 0, true));
//c1.SetSimpleColumn(elements, 0, 0, rectangle.Width, rectangle.Height / 4, 0, Element.ALIGN_CENTER); // align bottom
//c1.SetSimpleColumn(elements, 0, rectangle.Height / 2, rectangle.Width, rectangle.Height, 0, Element.ALIGN_CENTER); // align top
c1.SetSimpleColumn(elements, rectangle.Width/2, 0, rectangle.Width, rectangle.Height, 0, Element.ALIGN_CENTER); // align right
//c1.SetSimpleColumn(elements, 0, 0, rectangle.Width/2, rectangle.Height, 0, Element.ALIGN_CENTER); // …Run Code Online (Sandbox Code Playgroud)