2

現在、iTextSharp を使用して PDF フィールド マッピングを実行しようとしていますが、現在の課題は、変更されたファイルをvarbinary[max]列に保存することだけです。次に、後でそのブロブを読み取り、ファイルに保存する pdf に変換する必要があります。

私はサンプルコードを見てきましたが、探しているものを正確に見つけることができず、[ファイルから iTextSharp オブジェクトへの読み取り] -> [自分のものを実行] -> をつなぎ合わせることができないようです[に変換varbinary(max)] パイプライン、またはそのブロブを保存可能なファイルに変換することはありません。

誰かが非常に役立つコード スニペットの例を持っている場合。ありがとう!

4

1 に答える 1

2

複数のパスで pdf を処理する必要性は、私が最初に作業を開始したときはすぐには明確ではなかったので、おそらくこれはあなたの助けになるでしょう.

以下のメソッドでは、pdf を作成して にレンダリングし、byte[]後処理のためにロードして、pdf を再度レンダリングし、結果を返します。

あなたの質問の残りの部分は、byte[]を に出入りさせ、ファイルvarbinary[max]に保存byte[]し、それを読み戻すことを扱います。これは、十分に簡単にグーグルで検索できます。

public byte[] PdfGeneratorAndPostProcessor()
{
  byte[] newPdf;

  using (var pdf = new MemoryStream())
  using (var doc = new Document(iTextSharp.text.PageSize.A4))
  using (PdfWriter.GetInstance(doc, pdf))
  {
    doc.Open();

    // do stuff to the newly created doc...

    doc.Close();
    newPdf = pdf.GetBuffer();
  }      

  byte[] postProcessedPdf;
  var reader = new PdfReader(newPdf);

  using (var pdf = new MemoryStream())
  using (var stamper = new PdfStamper(reader, pdf))
  {
    var pageCount = reader.NumberOfPages;
    for (var i = 1; i <= pageCount; i++)
    {
      // do something on each page of the existing pdf
    }

    stamper.Close();
    postProcessedPdf = pdf.GetBuffer();
  }

  reader.Close();
  return postProcessedPdf;
}
于 2013-06-18T23:10:47.867 に答える