使用itextsharp将图像设置为pdf中的水印的问题

时间:2017-09-25 10:17:28

标签: c# itext

我正在尝试使用itextsharp在PDF中添加图像,但问题是图像在背景中没有设置正确(水印)。

我想这样:

enter image description here

但输出是这样的:

enter image description here

这里有一些我发布的代码:

public class PdfWriterEvents : IPdfPageEvent
{
    string watermarkText = string.Empty;

    public PdfWriterEvents(string watermark)
    {
        watermarkText = watermark;
    }
    public void OnStartPage(PdfWriter writer, Document document)
    {
        float fontSize = 80;
        float xPosition = iTextSharp.text.PageSize.A4.Width / 2;
        float yPosition = (iTextSharp.text.PageSize.A4.Height - 140f) / 2;
        float angle = 45;
        try
        {
            PdfContentByte under = writer.DirectContentUnder;
            Image image = Image.GetInstance(watermarkText);
            image.SetAbsolutePosition(55f, 55f);                
            under.AddImage(image);

        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex.Message);
        }
    }
    public void OnEndPage(PdfWriter writer, Document document) { }
    public void OnParagraph(PdfWriter writer, Document document, float paragraphPosition) { }
    public void OnParagraphEnd(PdfWriter writer, Document document, float paragraphPosition) { }
    public void OnChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title) { }
    public void OnChapterEnd(PdfWriter writer, Document document, float paragraphPosition) { }
    public void OnSection(PdfWriter writer, Document document, float paragraphPosition, int depth, Paragraph title) { }
    public void OnSectionEnd(PdfWriter writer, Document document, float paragraphPosition) { }
    public void OnGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) { }
    public void OnOpenDocument(PdfWriter writer, Document document) { }
    public void OnCloseDocument(PdfWriter writer, Document document) { }
}

在此处调用代码:

writer.PageEvent = new PdfWriterEvents(LogoImage);

1 个答案:

答案 0 :(得分:1)

代码中有大量不必要的行。例如,您定义fontSizexPositionyPositionangle,但您不会对这些变量做任何事情。它好像你从互联网上复制/粘贴了一些代码,却没有理解该代码应该做什么。这很奇怪。

假设您想要缩放图片以使其适合页面大小,那么您必须获得页面的宽度和高度:document.PageSize.Widthdocument.PageSize.Height

然后你必须决定是否要让图像保持其宽高比。如果没有,您可以使用img.ScaleAbsolute(width, height),但请注意,这可能会扭曲您的图像。如果您想避免这种失真,您应该使用ScaleToFit()方法:

public void OnStartPage(PdfWriter writer, Document document)
{
    float width = document.PageSize.Width;
    float height = document.PageSize.Height;
    try
    {
        PdfContentByte under = writer.DirectContentUnder;
        Image image = Image.GetInstance(watermarkText);              
        image.ScaleToFit(width, height);
        image.SetAbsolutePosition(0, 0);  
        under.AddImage(image);
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message);
    }
}

在此示例中,我使用00作为偏移量。我不知道你想要多少保证金(如果你想要保证金,你必须调整widthheight),我也不知道你是否想要使图像居中(这需要一些小学数学)。

无论如何,这个答案解决了您的主要问题:您忘记缩放图像。