我正在尝试使用itextsharp在PDF中添加图像,但问题是图像在背景中没有设置正确(水印)。
我想这样:
但输出是这样的:
这里有一些我发布的代码:
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);
答案 0 :(得分:1)
代码中有大量不必要的行。例如,您定义fontSize
,xPosition
,yPosition
和angle
,但您不会对这些变量做任何事情。它好像你从互联网上复制/粘贴了一些代码,却没有理解该代码应该做什么。这很奇怪。
假设您想要缩放图片以使其适合页面大小,那么您必须获得页面的宽度和高度:document.PageSize.Width
和document.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);
}
}
在此示例中,我使用0
,0
作为偏移量。我不知道你想要多少保证金(如果你想要保证金,你必须调整width
和height
),我也不知道你是否想要使图像居中(这需要一些小学数学)。
无论如何,这个答案解决了您的主要问题:您忘记缩放图像。