0

私は何をする必要がありますか

私はテストを作成しており、現在、PDF が最初のページに正しくスタンプされているかどうかを確認しようとしています。このために、このスタンプがテキストレイヤーなどにないように見えるため、機能しなかったスタンプテキストのページを検索しようとしました。要するに、スタンプを探す場所がわかりません。

刻印サービスとは

PdfStamper = new PdfStamper(Stamper.mPDFSource, Stamper.mStreamOut);
PdfContentByte canvas = stamper.GetOverContent(mPage);
PdfPTable table = new PdfPTable(1);
table.SetTotalWidth(new float[] { table_width });
Font cellFont = new Font(Font.FontFamily.HELVETICA, mFontSize, Font.NORMAL, textcolor);
Phrase phrase = new Phrase(cell_text, cellFont);
PdfPCell cell = new PdfPCell(phrase);
table.AddCell(cell);
table.WriteSelectedRows(0, strRows.Length, xpos, ypos, canvas);

わかったと思うこと

  • 私が読んだスレッドによると、この方法で作成されたスタンプは基本的に注釈になります。ただし、テーブルが使用されている例はまだ見つかりません。
  • 前の説明が正しければ、次のコードが null を返すのはなぜですか? これは、さまざまなスレッドでソリューションと呼ばれています。

.

PdfReader.GetPdfObject(pdfDictionary.Get(PdfName.ANNOTS));
PdfReader.GetPdfObject(pdfDictionary.Get(PdfName.ANNOT));
pdfDictionary.GetAsArray(PdfName.ANNOT);
pdfDictionary.GetAsArray(PdfName.ANNOTS);

iTextSharp: 5.3.5.0 .Net: 4.0

スタンプはどこで/どのように見つけることができますか?

よろしくアニ

4

1 に答える 1

2

テキストや画像を追加するだけの場合は、通常のテキスト ストリームを調べることができるはずです。アノテーションの一種である「スタンプ」についておっしゃっていますが、それを使っていないので、あなたが行った検索ではアノテーションの結果が返ってきたと思います。を使用しPdfStamperて既存のドキュメントを変更しています。

以下は、基本的な PDF を作成し、一意の文字列を含むテーブルを追加して変更し、最後に PDF で一意の文字列を検索する方法を示す完全に機能する例です。うまくいけば、コード内のコメントですべてが説明されるはずです。下部の警告にも注意してください。

/* Setup */

//Test files
var file1 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "file1.pdf");
var file2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "file2.pdf");

//Stamp Text
var stampText = "**UNIQUE_STAMP_TEXT**";

/* Step 1 */

//Create a basic simple file, nothing special here
using (var fs = new FileStream(file1, FileMode.Create, FileAccess.Write, FileShare.None)) {
    using (var doc = new Document()) {
        using (var writer = PdfWriter.GetInstance(doc, fs)) {
            doc.Open();

            doc.Add(new Paragraph("Hello World"));

            doc.Close();
        }
    }
}

/* Step 2 */

//Create our second file based on the first file
using (var reader = new PdfReader(file1)) {
    using (var fs = new FileStream(file2, FileMode.Create, FileAccess.Write, FileShare.None)) {
        using (var stamper = new PdfStamper(reader, fs)) {

            //Get the raw content stream "above" the existing content
            var canvas = stamper.GetOverContent(1);

            //Create a basic single column table
            var table = new PdfPTable(1);
            table.SetTotalWidth(new float[] { 500 });
            var cellFont = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, BaseColor.RED);

            //Add our special stamp text
            table.AddCell(new PdfPCell(new Phrase(stampText, cellFont)));

            //Draw the table onto the canvas
            table.WriteSelectedRows(0, 1, 50, 50, canvas);

        }
    }
}

/* Step 3 */

//Search the previously created PDF for the given string
bool hasStampText = false;
using (var reader = new PdfReader(file2)) {
    var text = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, 1);

    //WARNING: PdfPTable will wrap text if needed. Unless you can gaurantee that your text fits into the provided cell
    //         you might want to have some additional logic to search for your unique string.
    hasStampText = text.Contains(stampText);
}
于 2013-10-23T16:08:13.387 に答える