如何计算水印图像的图像尺度

时间:2017-08-29 09:15:32

标签: itext

我有一段代码可以将图像水印放到现有的pdf中。我正在寻找一种计算水印图像的比例百分比的方法

 public void MixFiles(String wmrk, String src, String dest)
    {
        string watermarkedFile = dest;

        PdfReader pdfReader = new PdfReader(src);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(dest, FileMode.Create, FileAccess.Write, FileShare.None));
        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(wmrk);
        PdfContentByte waterMark;
        for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++)
        {
            waterMark = pdfStamper.GetOverContent(pageIndex);
            // the scale percent is found by trial and error how can I calculate it??
            img.ScalePercent(24f);

            img.SetAbsolutePosition(0f, 0f);

            waterMark.AddImage(img);
        }
        pdfStamper.FormFlattening = true;
        pdfStamper.Close();           
    }

我的代码到目前为止工作但其他水印图像会发生什么。比例比例取决于什么?水印图像是一个尺寸为210x297mm的png,最佳填充的源pdf也有210x297mm的页面都具有300 dpi的分辨率。

1 个答案:

答案 0 :(得分:0)

我发现itext使用的内部分辨率为72 dpi。水印png的原始分辨率为300 dpi。因此72/300结果为0.24。 我尝试使用400 dpi水印并获得72/400 = 0.18的预期结果。 对于未知的水印分辨率,我现在使用

System.Drawing.Image newImage = System.Drawing.Image.FromFile(wmrk);
var reso=newImage.HorizontalResolution;
float scalepercent = (72/reso)*100;  
img.ScalePercent(scalepercent);