1

iText を使用してテキスト フィールドの色を塗りつぶそうとしています。setfieldproperty を試しましたが、bgcolor または塗りつぶしの色属性では機能しません。私が探しているのは、既存のテキストまたは画像にオーバーレイされるように設定するテキスト フィールドのプロパティです。

最後にいくつかのケースを試しました..

    ' Create a new PDF reader based on the PDF template document
    Dim pdfReaderBG As PdfReader = New PdfReader(pdfTemplate) ' Page of Fields
    Dim pdfReaderFG As PdfReader = New PdfReader(pdfExisting) ' Image from CD Image

    'Create the stream for the new PDF Document with the BackGround PDf
    Dim writer As PdfStamper = New PdfStamper(pdfReaderBG, New FileStream("c:\temp\CDs\newMerge.pdf", FileMode.Create))

    'Get all the content of the page
    Dim content_Byte As PdfContentByte = writer.GetUnderContent(1)

    'Then get the Other PDF to overlay the other
    Dim mark_page As PdfImportedPage = writer.GetImportedPage(pdfReaderFG, 1)

    If (mark_page.Width > mark_page.Height) Then 'Check to see if it is in Landscape
        content_Byte.AddTemplate(mark_page, 0, -1, 1, 0, 0, mark_page.Width)
    Else
        'Then add the content to the new page over the Image
        content_Byte.AddTemplate(mark_page, 0, 0)
    End If

    Dim formFields As AcroFields = writer.AcroFields

    formFields.SetFieldProperty("cd28", "borderColor", BaseColor.GREEN, Nothing)
    'content_Byte.te(BaseColor.PINK)

    **formFields.SetFieldProperty("cd28", "backgroundcolor", BaseColor.YELLOW, Nothing)
    'formFields.setfieldproperty("cd28") ' SetFieldProperty("cd28", "bgColor", BaseColor.WHITE, Nothing)**

1 つのテキスト フィールドの背景の色を変更したいだけです

ドキュメント内のテキスト フィールドを手動で編集する場合。プロパティの外観タブ。塗りつぶしの色と境界線の色のプロパティがあります。境界線の色を実行できます。コード内で塗りつぶしの色のプロパティを実行できないようです。

4

1 に答える 1

2

背景色は、MK キーの下のフォーム フィールドの表示ウィジェットに格納されます (PDF 仕様 12.5.6.19)。

以下は、2 つの異なる方法で背景色を設定するサンプル コードです。最初のブロックは、まったく新しい PDF を作成し、それにフォーム フィールドを直接追加します。MKBackgroundColorこの方法でプロパティを設定するだけで、設定は完了FormFieldです。2 番目のブロックは、最初のブロックの PDF を編集し、名前付きフィールドを取得し、新しい辞書を作成し、それに色を追加して、フィールドのウィジェットに割り当てます (プロセスで既存の MK エントリを破棄します)。

コードの最初のブロックは、はるかに簡単な方法です。詳細については、コード内のコメントを参照してください。

    ''//File to output
    Dim TestFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf")
    Dim Test2File = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test2.pdf")

    ''//Standard iTextSharp setup, nothing special
    Using FS As New FileStream(TestFile, FileMode.Create, FileAccess.Write, FileShare.None)
        Using Doc As New Document()
            Using writer = PdfWriter.GetInstance(Doc, FS)
                Doc.Open()

                ''//Add a generic paragraph
                Doc.Add(New Paragraph("Hello"))

                ''//Create our text field
                Dim TF As New iTextSharp.text.pdf.TextField(writer, New Rectangle(50, 650, 250, 600), "FirstName")

                ''//Get the raw form field
                Dim FF = TF.GetTextField()

                ''//Sat the background color
                FF.MKBackgroundColor = BaseColor.RED

                ''//Add it to the document
                writer.AddAnnotation(FF)
                Doc.Close()
            End Using
        End Using
    End Using

    ''//Read the file above
    Dim R As New PdfReader(TestFile)
    ''//Create a new output file
    Using FS As New FileStream(Test2File, FileMode.Create, FileAccess.Write, FileShare.None)
        ''//Bind a stamper
        Using stamper As New PdfStamper(R, FS)

            ''//Get all of the fields
            Dim Fields = stamper.AcroFields.Fields

            ''//Get our specific field created above
            Dim FF = stamper.AcroFields.GetFieldItem("FirstName")

            ''//Color to use for the background
            Dim ColorBase = BaseColor.GREEN

            ''//The background color is a part of the display widget's MK property
            ''//This example is going to erase any existing ones and just create a new one
            Dim NewMK As New PdfDictionary(PdfName.MK)
            ''//Put our backgroun and the RGB values into the MK dictionary
            NewMK.Put(PdfName.BG, New PdfArray({ColorBase.R, ColorBase.G, ColorBase.B}))

            ''//Get the actual widget for the field
            Dim W = FF.GetWidget(0)
            ''//Set the MK value
            W.Put(PdfName.MK, NewMK)

            ''//Save and close
            stamper.Close()
        End Using
    End Using
于 2013-03-11T22:01:38.487 に答える