4

全て、

itextsharpを使用してPDFに画像透かしを追加しようとしています。透かしは期待どおりにすべてのページに表示されていますが、すでに画像が表示されているページがあります。透かしの画像をPDFの既存の画像の上に配置したいと思います。次のコードを使用して画像を追加しています

        using (Stream output = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (PdfStamper pdfStamper = new PdfStamper(pdfReader, output))
            {
                for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++)
                {
                    pdfStamper.FormFlattening = false;
                    iTextSharp.text.Rectangle pageRectangle = pdfReader.GetPageSizeWithRotation(pageIndex);
                    PdfContentByte pdfData = pdfStamper.GetUnderContent(pageIndex);
                    pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 10);
                    PdfGState graphicsState = new PdfGState();
                    graphicsState.FillOpacity = 0.4F;
                    pdfData.SetGState(graphicsState);
                    pdfData.BeginText();

                    iTextSharp.text.Image jpeg = iTextSharp.text.Image.GetInstance(wtrmrkimg, BaseColor.GREEN);
                    float width = pageRectangle.Width;
                    float height = pageRectangle.Height;
                    jpeg.ScaleToFit(width, height);
                    jpeg.SetAbsolutePosition(width / 2 - jpeg.Width / 2, height / 2 - jpeg.Height / 2);
                    jpeg.SetAbsolutePosition(50, 50);
                    jpeg.Rotation = 45;                       

                    pdfData.AddImage(jpeg);

                    pdfData.EndText();
                }
                pdfStamper.Close();
            }
            output.Close();
            output.Dispose();
        }

現在のコードの出力も添付しています: これは問題のある画像です

4

2 に答える 2

13

交換して動作させました

PdfContentByte pdfData = pdfStamper.GetUnderContent(pageIndex);

PdfContentByte pdfData = pdfStamper.GetOverContent(pageIndex);
于 2013-03-25T13:03:46.380 に答える
0

交換

jpeg.SetAbsolutePosition(width / 2 - jpeg.Width / 2, height / 2 - jpeg.Height / 2);

jpeg.SetAbsolutePosition(width / 2 - jpeg.ScaledWidth / 2, height / 2 - jpeg.ScaledHeight / 2);

削除します

jpeg.SetAbsolutePosition(50, 50);

透かしを中央に配置するには

于 2017-02-03T16:54:49.860 に答える