using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; using System.Windows.Forms; using System.Drawing.Imaging; namespace ConvertImage { class PDFHelper { public static void SaveGridViewToPdf(DataGridView dgvInfo, string PDFFilePath) { Bitmap bmImage = GetDataGridView(dgvInfo); Document document = new Document(); document.SetPageSize(new iTextSharp.text.Rectangle(bmImage.Width+72f, 1072f)); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFilePath, FileMode.OpenOrCreate, FileAccess.Write)); document.Open(); List<System.Drawing.Image> images = getAllImages(bmImage, bmImage.Width, 1000f); iTextSharp.text.Image jpeg; for (int i = 0; i < images.Count; i++) { jpeg = iTextSharp.text.Image.GetInstance(images[i], ImageFormat.Jpeg); document.NewPage(); document.Add(jpeg); float a = document.Left; } if (document != null && document.IsOpen()) { document.Close(); } if (writer != null) { writer.Close(); } } private static Bitmap GetDataGridView(DataGridView dgvInfo) { // 将datagridview的自动扩展打开 dgvInfo.AutoSize = true; // 建立datagridview图片 Bitmap bmNewBitmap = new Bitmap(dgvInfo.Width, dgvInfo.Height); dgvInfo.DrawToBitmap(bmNewBitmap, new System.Drawing.Rectangle(0, 0, dgvInfo.Width, dgvInfo.Height)); // 将datagridview恢复原状 dgvInfo.AutoSize = false; return bmNewBitmap; } private static List<System.Drawing.Image> getAllImages(Bitmap bmSourceImage, float fPageWidth, float fPageHeigh) { List<System.Drawing.Image> lImages = new List<System.Drawing.Image>(); // 距离图片左边位置 float fLeft = 0; // 距离图片上边位置 float fTop = 0; // 切割部分 RectangleF rfPart; // 切割图像 Bitmap bmPartImage; // 下方还有图片 while ((fTop + fPageHeigh) < bmSourceImage.Height) { rfPart = new RectangleF(fLeft, fTop, fPageWidth, fPageHeigh); bmPartImage = bmSourceImage.Clone(rfPart, PixelFormat.DontCare); lImages.Add(bmPartImage); fTop += fPageHeigh; } // 最下方的图片 rfPart = new RectangleF(fLeft, fTop, fPageWidth, bmSourceImage.Height - fTop); bmPartImage = bmSourceImage.Clone(rfPart, PixelFormat.DontCare); lImages.Add(bmPartImage); return lImages; } } }