iTextSharp图像带到前面

问题描述 投票:1回答:2

为我们的Web应用程序构建文档生成系统,并根据需要标记文档。该文件采用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);
image pdf itextsharp
2个回答
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(),如代码示例中所示。


0
投票

也许它有点晚了,但我遇到了同样的问题,我已经解决了Paragraphs的解决方法(下面是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

我看到你使用绝对位置将你的徽标放在你的图像上,所以我,考虑修改宽度为8的Chunk的用法,如果你不需要在有限的空间内安装它。

© www.soinside.com 2019 - 2024. All rights reserved.