iTextSharp图像带到前面

时间:2014-10-31 10:47:07

标签: image pdf itextsharp

为我们的网络应用构建文档生成系统,并根据需要标记文档。该文件采用powerpoint设计,并通过NitroPdf打印。第一页基本上是一个大图像,图像中有一个白色区域。 我试图将品牌标识放在分配的空白区域中。定位没问题,但是我的品牌形象出现在PDF文档整页图片的背后。

用谷歌搜索,我似乎无法找到一个' z-index'类型函数...会不会认为我不是唯一一个有问题的人?

添加图像的代码部分如下:

        image.ScaleToFit(width, height);
        image.SetDpi(300, 300);

        // Position the logo.
        image.SetAbsolutePosition(fromLeft, fromBottom);

        // Add the image.
        document.Add(image);

2 个答案:

答案 0 :(得分:0)

非常奇怪的是,您需要以下行来将图像添加到现有PDF:

document.Add(image);

好像您正在使用PdfWriter而不是PdfStamper,这会非常奇怪。

也许您在开始编写代码之前忽略了documentation或者您没有搜索StackOverflow:How can I insert an image with iTextSharp in an existing PDF?

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main(string[] args)
    {
        using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            var reader = new PdfReader(inputPdfStream);
            var stamper = new PdfStamper(reader, outputPdfStream);
            var pdfContentByte = stamper.GetOverContent(1);

            Image image = Image.GetInstance(inputImageStream);
            image.SetAbsolutePosition(100, 100);
            pdfContentByte.AddImage(image);
            stamper.Close();
        }
    }
}

您可能找到了使用GetUnderContent()的示例。这会在现有内容下添加内容。如果您希望内容涵盖现有内容,则需要GetOverContent(),如代码示例所示。

答案 1 :(得分:0)

也许有点晚了,但是我遇到了同样的问题,并且通过使用段落(在Visual Basic中的代码下面)解决了一个问题:

Public Class PDF

  Public Doc As Document
  Public Writer As PdfWriter
  Public Cb As PdfContentByte

  Public Sub setFrontImage(ByVal _appendImg As String, align As Integer, x As Integer, y As Integer, ByVal w As Integer, h As Integer, _leading As Integer)

    Dim ct As New ColumnText(Cb)
    Dim ph As Phrase
    Dim ch As Chunk

    Dim p As Paragraph = new Paragraph()
    Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(_appendImg)
    image.ScaleAbsolute(w, h)
    p.Add(new Chunk(image,x,y))

    ct.SetSimpleColumn(p,x, y, w, h, _leading, align)
    ct.Go()

  End Sub
End Class

我看到您使用绝对位置在图像上放置徽标,所以我也是,如果不需要将Chunk的宽度设置为8,可以考虑修改其用法。