2

我正在使用 PDFSharp.NET 库为 PDF 文件列表添加水印。一切正常,该网站有很多示例。

http://www.pdfsharp.net/wiki/Graphics-sample.ashx

我需要做的最后一件事是在 PDF 页面的中间添加很大的公司徽标。

我可以使用 PNG,这样设置为透明的区域就不会“覆盖”PDF 页面”。

pdf 不是使用 PDFSharp 生成的,而是“图像”PDF。

出于这个原因,我需要的是,除了有效的透明度之外,还可以设置一些如何设置图像不透明度!

放置图像的代码是这样的:

XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append);
XImage image = XImage.FromFile(mypath);
gfx.DrawImage(image, pwidth/2-image.PixelWidth/2, pheight/2 image.PixelHeight/2);
gfx.Dispose();

有人已经面临过这个问题吗?

4

2 回答 2

2

我不知道如何在使用 PDFsharp 绘制图像时更改图像的不透明度(恐怕这无法完成)。

因此,我将使用图像处理器打开徽标(PNG)并在那里设置不透明度。

于 2013-05-09T15:20:03.557 回答
0

我现在也在考虑制作水印(companyLogo)以放置在 pdf 表上。下面的代码可让您更改不透明度。

PDFSharp 不能改变图像的不透明度。您可以做的是将您提供的图像更改为 PDF 清晰。这已经得到了回答,所以我只是分享我这样做的代码。

private void DrawGraphics()
{
    XGraphics gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append);
    Image myTransparenImage = SetImageOpacity(Image.FromFile("MyPath"), (float)opacityYouwant); // opacityYouWant has to be a value between 0.0 and 1.0

    XImage image = XImage.FromBitmapSource(Convert(myTransparenImage));
    gfx.DrawImage(image, pwidth / 2 - image.PixelWidth / 2, pheight / 2 image.PixelHeight / 2);
    gfx.Dispose();
}

public Image SetImageOpacity(Image image, float opacity)
{
    try
    {
        //create a Bitmap the size of the image provided  
        Bitmap bmp = new Bitmap(image.Width, image.Height);

        //create a graphics object from the image  
        using (Graphics gfx = Graphics.FromImage(bmp))
        {

            //create a color matrix object  
            ColorMatrix matrix = new ColorMatrix();

            //set the opacity  
            matrix.Matrix33 = opacity;

            //create image attributes  
            ImageAttributes attributes = new ImageAttributes();

            //set the color(opacity) of the image  
            attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

            //now draw the image  
            gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
        }
        return bmp;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        return null;
    }
}

public BitmapImage Convert(Image img)
{
    using (var memory = new MemoryStream())
    {
        img.Save(memory, ImageFormat.Png);
        memory.Position = 0;

        var bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.StreamSource = memory;
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.EndInit();

        return bitmapImage;
    }
}
于 2020-01-16T08:36:12.680 回答