求助,asp.net中将office文件转成pdf,并加上水印,现在水印加不上

时间:2022-03-19 20:17:58
现在已经实现了,转成pdf。
我通过flashpaper实现了转成pdf。
但是加水印中,如下代码
 public static bool PDFWatermark(string inputfilepath, string outputfilepath, string ModelPicName, float top, float left, ref string strMsg)
    {
        PdfReader pdfReader = null;
        PdfStamper pdfStamper = null;
        try
        {
            //pdf读取器
            pdfReader = new PdfReader(inputfilepath);
            //页数
            int numberOfPages = pdfReader.NumberOfPages;
            //页的大小
            iTextSharp.text.Rectangle psize = pdfReader.GetPageSize(1);
            float width = psize.Width;
            float height = psize.Height;
            //生成的pdf
            pdfStamper = new PdfStamper(pdfReader, new FileStream(outputfilepath, FileMode.Create));

            PdfContentByte waterMarkContent;
            //用于水印的图片
            iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(ModelPicName);

             image.GrayFill = 60;//透明度,灰色填充
             image.ImageMask.Transparency = new int[]{50,50};
             image.InitialRotation = 2;
             image.Interpolation = true;
             image.MakeMask();
            //image.Rotation//旋转
            //image.RotationDegrees//旋转角度
            //水印的位置 
            if (left < 0)
            {
                left = width - image.Width + left;
            }
            
            image.SetAbsolutePosition(left, (height - image.Height) - top);


            //每一页加水印,也可以设置某一页加水印 
            for (int i = 1; i <= numberOfPages; i++)
            {
                waterMarkContent = pdfStamper.GetUnderContent(i);
                
                waterMarkContent.AddImage(image);
            }
            strMsg = "success";
            return true;
        }
        catch (Exception ex)
        {
            strMsg = ex.Message.Trim();
            return false;
        }
        finally
        {

            if (pdfStamper != null)
                pdfStamper.Close();

            if (pdfReader != null)
                pdfReader.Close();
        }
    }

waterMarkContent = pdfStamper.GetUnderContent(i)
换成
waterMarkContent = pdfStamper.GetOverContent(i)可以加上,水印浮在内容上面了。
因此我联想到使用GetUnderContent方法的时候是因为水印被背景覆盖了。
求高手帮忙!

10 个解决方案

#1


用控件不好?

#2


使用flashpaper不行吗?那在代码里面用哪个第三方的插件呢?

#3


或者有办法读取pdf的时候将背景从文件中剔除吗?itextsharp里面有相应的方法吗?

#4


可以直接用itextsharp去产生PDF并加水印。

#5


用itextsharp直接转的话,觉得比较烦,因为要兼容不同的格式。包括图片,txt,这些格式都是要的。另外可能也有效率的问题。

#6


有人有好的方案吗?用iTextsharp会有各种格式转换的问题。而且转换效率不能保证呢。

#7


iTextsharp 免費的是這樣了。問問作者吧

#8


已经解决了,使用处理过的png图片可以。

#9


引用 8 楼  的回复:
已经解决了,使用处理过的png图片可以。


楼主希望发一份DEMO我看看 我想知道如何加水印

#10


处理成透明的图片?

#1


用控件不好?

#2


使用flashpaper不行吗?那在代码里面用哪个第三方的插件呢?

#3


或者有办法读取pdf的时候将背景从文件中剔除吗?itextsharp里面有相应的方法吗?

#4


可以直接用itextsharp去产生PDF并加水印。

#5


用itextsharp直接转的话,觉得比较烦,因为要兼容不同的格式。包括图片,txt,这些格式都是要的。另外可能也有效率的问题。

#6


有人有好的方案吗?用iTextsharp会有各种格式转换的问题。而且转换效率不能保证呢。

#7


iTextsharp 免費的是這樣了。問問作者吧

#8


已经解决了,使用处理过的png图片可以。

#9


引用 8 楼  的回复:
已经解决了,使用处理过的png图片可以。


楼主希望发一份DEMO我看看 我想知道如何加水印

#10


处理成透明的图片?