Imports System.Drawing
Imports System.Text
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
'首先需要引用itextsharp.dll,一个开源dll,直接到官网下载
'此函数主要处理从数据库等地来的图像,接收二进制流
Public Function ConvertImageToPDF(ByVal fileBuffer As Byte()) As Byte()
Dim pages As New List(Of [String])()
Dim result() As Byte
Dim image As iTextSharp.text.Image
Dim mStream As New MemoryStream()
Dim bm As Bitmap
Dim ImageStream As New MemoryStream(fileBuffer)
Dim pageCount As Integer
Dim document As New Document(iTextSharp.text.PageSize.LETTER, 20, 20, 20, 20)
'pdf
'PdfWriter.GetInstance(document, New FileStream(desPath + name & ".pdf", FileMode.OpenOrCreate))
PdfWriter.GetInstance(document, mStream)
document.Open()
Try
bm = New Bitmap(ImageStream)
pageCount = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page)
For i As Integer = 0 To pageCount - 1 '处理多页
bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i)
image = iTextSharp.text.Image.GetInstance(bm, System.Drawing.Imaging.ImageFormat.Bmp)
''A4
'If image.Height > iTextSharp.text.PageSize.A4.Height - 25 Then
' image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25)
'ElseIf image.Width > iTextSharp.text.PageSize.A4.Width - 25 Then
' image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25)
'End If
'Letter
If image.Height > iTextSharp.text.PageSize.LETTER.Height - 20 Then
image.ScaleToFit(iTextSharp.text.PageSize.LETTER.Width - 20, iTextSharp.text.PageSize.LETTER.Height - 20)
ElseIf image.Width > iTextSharp.text.PageSize.LETTER.Width - 20 Then
image.ScaleToFit(iTextSharp.text.PageSize.LETTER.Width - 20, iTextSharp.text.PageSize.LETTER.Height - 20)
End If
'center
image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE
document.NewPage()
document.Add(image)
Next
Catch ex As Exception
End Try
Try
document.Close()
Catch ex As Exception
Return Nothing
End Try
result = mStream.GetBuffer
Return result
End Function
————————————————————————————————————————————
'此函数主要处理来自于硬盘的图像
Public Function ConvertImageToPDF(ByVal desPath As String, ByVal name As String) As Byte()
Dim ImageStream As FileStream
Try
ImageStream = New FileStream(desPath & name, FileMode.Open)
Catch ex As Exception
Return Nothing
End Try
Dim result(ImageStream.Length) As Byte
ImageStream.Read(result, 0, result.Length)
ImageStream.Close()
result = ConvertImageToPDF(result)
Return result
End Function
——————————————————————————————————————————————
'使用
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'以将图片读取到二进制流中,模拟从数据库中取数据
Dim path As String = "E:/PrintFiles/Image/"
Dim name As String = "Customer Collections Detail0065.tif"
Dim fileStream As New FileStream(path + name, FileMode.Open)
Dim sRdr As New BinaryReader(fileStream)
Dim buffer(fileStream.Length) As Byte
sRdr.Read(buffer, 0, fileStream.Length)
'转换图片到PDF
Dim Attachment() As Byte = ConvertImageToPDF(buffer)
'或者直接 Dim Attachment() As Byte = ConvertImageToPDF(path,name);注意取消上面这一段
'输出到前端
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Length", Attachment.GetLength(0).ToString)
Response.AddHeader("Content-Disposition", "inline;filename=imageTest.pdf")
Response.Filter.Close() 'Close the filter
Response.BinaryWrite(Attachment)
Response.Flush()
Response.End()
End Sub