web-dev-qa-db-ja.com

既存のPDFにiTextSharpを使用して画像を挿入するにはどうすればよいですか?

既存のPDFがあり、FdFWriterを使用してテキストボックスに入力できます。うまく動作します。今では画像があります。ドキュメントを読んで、多くの例を調べましたが、既存のPDFを取得し、画像を画像フィールドに挿入するか、ボタンのアイコン画像として挿入します。試しましたが、文書が破損します。

既存のドキュメントを取得して、その上に画像を配置できるようにする必要があります。オリジナルを開いたり、読んだり、置き換えたり、削除したりしません。このオリジナルの変更と「オリジナル」という名前は、このコンテキストのソースファイルのみを意味します。画像を必要とするこのような多くのPDF=ファイルがあります。

助けてくれてありがとう。

編集-以下のコードにとても感謝しています。それはうまく機能しますが、私にとっての問題は、既存のPDFにデジタル署名があります。異なるバイトカウントまたは破損している他のアイテム。これは、result.pdfに表示される署名の隣に、「無効な署名」を示すアイコンがあることを意味します。

重要な場合には、Topaz署名パッドを使用して署名を作成していますが、これには独自のセキュリティがあります。 PDFをコピーするだけでは破損しませんが、以下のプロセスで破損します。

この場合重要なのは、コピーではなく、既存のドキュメントにイメージを配置しようとしています。

また、署名とは、ピン番号ではなく手書きを意味します。

ありがとうございました。

編集-PdfSignatureAppearanceはこれに使用できますか?

編集-私はそれを行うことができるようです:

var stamper = new PdfStamper(reader、outputPdfStream、 '1'、true);

42
johnny

既存のPDFファイルの内容を変更し、透かし、ページ番号、追加ヘッダーなどの追加コンテンツを追加する場合、PdfStamperは必要なオブジェクトです。次のコードを使用して正常に挿入しました指定された絶対位置への既存のpdfファイルへの画像:

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main(string[] args)
    {
        using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            var reader = new PdfReader(inputPdfStream);
            var stamper = new PdfStamper(reader, outputPdfStream);
            var pdfContentByte = stamper.GetOverContent(1);

            Image image = Image.GetInstance(inputImageStream);
            image.SetAbsolutePosition(100, 100);
            pdfContentByte.AddImage(image);
            stamper.Close();
        }
    }
}

画像を挿入すると、サイズを変更することができます。 iTextSharpドキュメントの transformation matrix をご覧ください。

67
Darin Dimitrov

署名コードに次の行を追加して画像を追加するだけで問題を解決できました

 var image = iTextSharp.text.Image.GetInstance(@"C:\Users\sushil\Documents\sansign.jpg");
appearance.Acro6Layers = true;
appearance.SignatureGraphic = image;
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

目に見えるデジタル署名で文書に署名していたので、今では画像とデジタル署名の両方のプロパティを並べて持つことができます

1
sushil.agarwal

これは、スタンパーを使用してページに画像を挿入する同様の例です。

Gmane iTexメーリングリストの投稿

1
John Bubriski

pdftkはこれを行うことができます。ライブラリではありませんが、コードから.exeとして簡単に呼び出すことができます。

stampおよびbackgroundコマンドを参照してください: http://www.pdflabs.com/docs/pdftk-man-page/

ref: PDFの上に差し込み印刷を行う方法

0