Вы можете сделать это довольно легко. Объект Document
- это вспомогательный объект, который абстрагирует многие из внутренних элементов модели PDF и по большей части предполагает, что вы хотите передавать содержимое, и этот текст будет располагаться над изображениями. Если вы хотите обойти это, вы можете вместо этого напрямую говорить об объекте PdfWriter
. У него есть два свойства DirectContent
и DirectContentUnder
, которые оба имеют методы с именем AddImage()
, которые можно использовать для установки абсолютной позиции на изображении. DirectContent
выше существующего контента, а DirectContentUnder
ниже его. Смотрите код для примера:
Похоже, вы делаете это в Интернете, поэтому вам нужно адаптировать его к тому потоку, который вы используете, но это должно быть довольно просто.
Одна нота, НИКОГДА вызов GetBuffer()
на MemoryStream
, ВСЕГДА использование ToArray()
. Первый метод включает неинициализированные байты, которые дадут вам потенциально поврежденные файлы PDF.
''//File that we are creating
Dim OutputFile As String = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf")
''//Image to place
Dim SampleImage As String = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "SampleImage.jpg")
''//Standard PDF creation setup
Using FS As New FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None)
Using Doc As New Document(PageSize.LETTER)
Using writer = PdfWriter.GetInstance(Doc, FS)
''//Open the document for writing
Doc.Open()
''//Add a simple paragraph
Doc.Add(New Paragraph("Hello world"))
''//Create an image object
Dim Img = iTextSharp.text.Image.GetInstance(SampleImage)
''//Give it an absolute position in the top left corner of the document (remembering that 0,0 is bottom left, not top left)
Img.SetAbsolutePosition(0, Doc.PageSize.Height - Img.Height)
''//Add it directly to the raw pdfwriter instead of the document helper. DirectContent is above and DirectContentUnder is below
writer.DirectContent.AddImage(Img)
''//Close the document
Doc.Close()
End Using
End Using
End Using