0

データベースに .pdf ファイルが保存されており、データベースに署名ファイル (.png) が保存されています。iTextSharp を使用して署名画像を .pdf ファイルに追加し、結果をブラウザーに表示しようとしています。

これが私のコードです:

        byte[] file = Repo.GetDocumentBytes(applicantApplication.ApplicationID, documentID);
        byte[] signatureBytes = Repo.GetSignatureBytes((Guid)applicantApplicationID, signatureID);

        iTextSharp.text.Image signatureImage = iTextSharp.text.Image.GetInstance(signatureBytes);                      
        iTextSharp.text.Document document = new iTextSharp.text.Document(); 

        using (System.IO.MemoryStream ms = new System.IO.MemoryStream(file, 0, file.Length, true, true))
        {
            PdfWriter writer = PdfWriter.GetInstance(document, ms);
            document.Open();

            signatureImage.SetAbsolutePosition(200, 200);
            signatureImage.ScaleAbsolute(200, 50);
            document.Add(signatureImage);

            document.Close();

            return File(ms.GetBuffer(), "application/pdf");
        }

ページが読み込まれ、署名付きの .pdf が表示されますが、元のドキュメントはどこにもありません。古い .pdf ファイルを編集するのではなく、新しい .pdf ファイルを作成してそこに画像を配置しているようです。

元の .pdf ドキュメントが「file」変数に読み込まれていることを確認しました。また、MemoryStream の "ms" の長さが byte[] "file" の長さと同じであることも確認しました。

4

1 に答える 1

1

私は自分のリポジトリで次のようなことをしました:

        using (Stream inputPdfStream = new MemoryStream(file, 0, file.Length, true, true))
        using (Stream inputImageStream = new MemoryStream(signatureBytes, 0, signatureBytes.Length, true, true))
        using (MemoryStream outputPdfStream = new MemoryStream())
        {
            var reader = new PdfReader(inputPdfStream);
            var stamper = new PdfStamper(reader, outputPdfStream);
            var cb = stamper.GetOverContent(1);

            iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
            image.SetAbsolutePosition(400, 100);
            image.ScaleAbsolute(200, 50);
            cb.AddImage(image);

            stamper.Close();

            return outputPdfStream.GetBuffer();
       }

StackOverflow の他のいくつかの回答から適応させました

于 2012-07-25T18:36:08.073 に答える