Я пытаюсь подписать документы, поступающие с WS, с помощью консольного приложения C#. Внутри файла Signer.sv c .cs я создал метод, который принимает байты pdf-файла в качестве параметра и возвращает буфер подписанного документа. Я пытался с "return pdfDictionary.GetBytes ()", но это приходит ноль. Каким способом я могу получить и вернуть подписанные байты pdf файла?
public static byte[] SetSignatureDefaultAppearance(byte[] doc)
{
using (MemoryStream output = new MemoryStream())
{
using (var reader = new PdfReader(doc))
{
using (var stamper = new PdfStamper(reader, new FileStream(@"C:\Users\Admin\Desktop\PdfDocs\document_pdf.pdf", FileMode.Create, FileAccess.Write), '\0', true))
{
Rectangle mediaBox = reader.GetPageSizeWithRotation(1);
bool portrait = mediaBox.Width > mediaBox.Height ? false : true; // kontrollojme nese dokumentin e kemi portret apo landscape
AcroFields fields = stamper.AcroFields;
List<string> signatureNames = fields.GetSignatureNames();
string signatureName = signatureNames.LastOrDefault();
PdfPKCS7 pkcs7 = fields.VerifySignature(signatureName);
Org.BouncyCastle.X509.X509Certificate signerCert = pkcs7.SigningCertificate;
String signerName = CertificateInfo.GetSubjectFields(signerCert).GetField("CN");
string[] words = signerName.Split(' ');
AcroFields.Item field = fields.GetFieldItem(signatureName);
PdfAppearance appearance;
for (int i = 0; i < field.Size; i++)
{
PdfDictionary widget = field.GetWidget(i);
Rectangle rectangle = PdfReader.GetNormalizedRectangle(widget.GetAsArray(PdfName.RECT));
appearance = rectangle.Height > rectangle.Width ?
PdfAppearance.CreateAppearance(stamper.Writer, rectangle.Height, rectangle.Width)
: PdfAppearance.CreateAppearance(stamper.Writer, rectangle.Width, rectangle.Height);
string url = ""; // HttpRuntime.AppDomainAppPath;
string imagePath = @"C:\Users\Admin\Desktop\PdfDocs\signature.png"; // url + "images\\1.png";
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagePath);
image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
image.ScaleToFit(100, 100);
image.SetAbsolutePosition(10, -25);
appearance.AddImage(image, false);
// first column
ColumnText firstColumn = new ColumnText(appearance);
Chunk firstChunk = new Chunk();
BaseFont firstFont = BaseFont.CreateFont(url + "C:\\Users\\Admin\\Downloads\\Helvetica.ttf" /*"css\\fonts\\Myriad Pro Regular.ttf"*/, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontOne = new iTextSharp.text.Font(firstFont, 10, iTextSharp.text.Font.BOLD);
firstChunk.Append(words[0]);
firstColumn.AddElement(new Paragraph(firstChunk));
firstChunk.Font = fontOne;
//firstChunk = new Chunk();
//firstChunk.Append(words[i]);
//firstColumn.AddElement(new Paragraph(firstChunk));
//firstChunk.Font = fontOne;
firstChunk = new Chunk();
firstColumn.AddElement(new Paragraph(firstChunk));
if (rectangle.Height > rectangle.Width)
{
firstColumn.SetSimpleColumn(0, 0, rectangle.Height / 2, rectangle.Width);
}
else
{
firstColumn.SetSimpleColumn(0, 0, rectangle.Width / 2, rectangle.Height);
}
firstColumn.Go();
// second column
ColumnText secondColumn = new ColumnText(appearance);
Chunk secondChunk = new Chunk();
BaseFont secondFont = BaseFont.CreateFont(url + "C:\\Users\\Admin\\Downloads\\Helvetica.ttf" /*"css\\fonts\\Myriad Pro Regular.ttf"*/, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontTwo = new iTextSharp.text.Font(secondFont, 6, iTextSharp.text.Font.NORMAL);
secondChunk.Font = fontTwo;
string text = "Digitally signed by " + signerName + "@Date: " + DateTime.Now.ToString("yyyy.MM.dd")
+ " " + DateTime.Now.ToString("hh:mm:ss") + " " + "+02'00'";
text = text.Replace("@", "" + System.Environment.NewLine);
secondChunk.Append(text);
secondColumn.AddElement(new Paragraph(secondChunk));
Console.Write(rectangle.Width); ///////////////////////////////////////////////////////////////
if (rectangle.Height > rectangle.Width)
{
secondColumn.SetSimpleColumn(rectangle.Height / 2, 0, rectangle.Height, rectangle.Width);
}
else
{
secondColumn.SetSimpleColumn(rectangle.Width / 2, 0, rectangle.Width, rectangle.Height);
}
secondColumn.Go();
PdfDictionary dictionary = GetAsDictAndMarkUsed((PdfStamperImp)stamper.Writer, widget, PdfName.AP,
PdfName.N, PdfName.RESOURCES, PdfName.XOBJECT, PdfName.FRM, PdfName.RESOURCES, PdfName.XOBJECT);
dictionary.Put(PdfName.N2, appearance.IndirectReference);
}
}
}
return ?????????????????????????????????;
}
}