将水印添加到Excel文件

时间:2013-09-06 11:14:19

标签: c# excel

我有一个从excel文件中的工作表读取数据的应用程序在同一文件的另一个工作表中打印出来。

为了我自己的满意,我想在显示输出的工作表上添加水印。 我正在使用C#和.NET

我是否需要粘贴任何特定代码?我不确定你需要什么。请询问您是否需要更多详细信息

用于处理excel对象的库 - :

using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;

//creating an object of Application
Excel.Application excelApp = new Excel.Application();

//creating an object of Workbook
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(path, 0,false,
                            5, "", "", false, Excel.XlPlatform.xlWindows,
                            "", true, false, 0, true, false, false);

//creating an object of Sheet
Excel.Sheets excelSheets = (Excel.Sheets)excelWorkbook.Sheets;

4 个答案:

答案 0 :(得分:0)

这可能会有所帮助......但此处图片已添加为背景

http://csharp.net-informations.com/excel/csharp-insert-backgroud-excel.htm

答案 1 :(得分:0)

由于Excel支持打开HTML,因此您可以生成使用excel打开的Html表。这段HTML代码为您的excel生成的文件添加了背景图像或水印(不是html标准)。您需要将图像文件放在与在Excel中打开的HTML文件相同的文件夹中。这适用于不使用任何.NET Framework生成Excel兼容文件的情况。

<强> Generated_Excel.html:

<html>
<body background="1.png">
    <table>
        <tr>
            <td>Column1</td> 
            <td>Column2</td>
        </tr>
        <tr>
            <td>Value Column 1</td> 
            <td>Value Column 2</td>
        </tr>
    </table>
</body>

最终结果:

enter image description here

答案 2 :(得分:0)

如果您使用的是Syncfusion XlsIO,则必须使用this code

// Set the image as sheet background
sheet.PageSetup.BackgoundImage = new System.Drawing.Bitmap(@"image.png");

答案 3 :(得分:0)

我一直在努力解决这个问题,因为在我发布工作代码的任何地方都没有找到解决方案。此解决方案通过创建临时图像并将其插入幻灯片来工作。创建代码的步骤基于:http://smallbusiness.chron.com/put-watermarks-photos-word-45076.html链接。

    public void AddWaterMarkToPowerPoint(string filePath)
    {
        string waterMarkText = "Top secret";

        PowerPoint.Application powerPointApp = new PowerPoint.Application();

        PowerPoint.Presentations pres = powerPointApp.Presentations;

        string imagePath = null;

        try
        {
            PowerPoint.Presentation pptPresentation = pres.Open(filePath, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

            PowerPoint.PageSetup pageSetup = pptPresentation.PageSetup;

            float pageWidth = pageSetup.SlideWidth;
            float pageHeight = pageSetup.SlideHeight;

            CreateTempWaterMarkImage(waterMarkText, ref imagePath, (int)pageHeight, (int)pageWidth);

            for (int i = 1; i <= pptPresentation.Slides.Count; i++)
            {
                PowerPoint.Slide slide = pptPresentation.Slides[i];

                PowerPoint.Shapes shapes = slide.Shapes;

                PowerPoint.Shape shape = shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, 0, 0, pageWidth, pageHeight);

                shape.Fill.UserPicture(imagePath);

                shape.Fill.Transparency = 0.7f;

                shape.Line.Transparency = 1;

                shape.ZOrder(MsoZOrderCmd.msoBringToFront);
            }

            pptPresentation.SaveAs(filePath);

            pptPresentation.Close();
        }
        catch (Exception ex)
        {
            //log exception

            throw;
        }
        finally
        {
            // Cleanup
            GC.Collect();
            GC.WaitForPendingFinalizers();

            powerPointApp.Quit();

            //remove temp image
            if (imagePath != null)
                File.Delete(imagePath);
        }
    }

private void CreateTempWaterMarkImage(string waterMarkText, ref string imagePath, int pageHeight, int pageWidth)
{

    float angleRotation = (float)((Math.Atan2((double)pageHeight, (double)pageWidth) * 180) / Math.PI);

    float fontSize = (float)Math.Sqrt(Math.Pow(pageHeight, 2) + Math.Pow(pageWidth, 2)) / 50;

    using (Bitmap newie = new Bitmap(pageWidth, pageHeight))
    {
        using (Graphics gr = Graphics.FromImage(newie))
        {
            gr.SmoothingMode = SmoothingMode.AntiAlias;

            gr.TranslateTransform((float)pageWidth / 2f, (float)pageHeight / 2f);

            gr.RotateTransform(-angleRotation);

            Font font = new Font("Arial", fontSize, FontStyle.Regular);

            SizeF textSize = gr.MeasureString(companyName, font);

            gr.DrawString(waterMarkText, font, SystemBrushes.GrayText, -textSize.Width, -textSize.Height);
        }

        string fileName = Path.GetRandomFileName();

            imagePath = Path.GetTempPath() + @"\" + fileName + ".png";

            newie.Save(imagePath, ImageFormat.Png);
        }
    }