manu_dhobale Ответов: 1

Веб-страница в изображение, а затем изображение в pdf


У меня есть длинная веб страница и я создаю ее образ,
а затем разрезать изображение по горизонтали на несколько изображений, чтобы поместиться на странице формата А4 pdf

я использовал itextsharp для PDF,
проблема в том, что изображение не помещается на странице формата А4, оно должно быть в хорошей форме во время печати.

CustomPdfWriter oPdfwriter = new CustomPdfWriter(@"D:\logg");
          oPdfwriter.CreateImage("http://www.codeproject.com/");
          oPdfwriter.CreatePdf();


public class CustomPdfWriter
 {
     string TempfileName = string.Empty;
     public CustomPdfWriter(string tempLocation)
     {
         TempfileName = tempLocation;
     }
     public void CreateImage(string url)
     {
         Thread thread = new Thread(delegate()
         {
             using (WebBrowser browser = new WebBrowser())
             {
                 browser.ScrollBarsEnabled = true;
                 browser.ScriptErrorsSuppressed = true;
                 browser.AllowNavigation = true;
                 browser.Navigate(url);
                 browser.Width = 1024;
                 browser.Height = 5680;
                 browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
                 while (browser.ReadyState != WebBrowserReadyState.Complete)
                 {
                     System.Windows.Forms.Application.DoEvents();
                 }
             }
         });
         thread.SetApartmentState(ApartmentState.STA);
         thread.Start();
         thread.Join();

     }

     public void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
     {
         WebBrowser browser = sender as WebBrowser;
         using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))
         {
             browser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, browser.Width, browser.Height));
             bitmap.Save(TempfileName + @"\img.png", System.Drawing.Imaging.ImageFormat.Png);
         }
     }

     public System.Drawing.Rectangle SplitImage(Bitmap bitmap, int x, int y, int width, int height, int part, int sequence)
     {
         Bitmap originalImage = bitmap;
         System.Drawing.Rectangle rect = new System.Drawing.Rectangle(x, y, width, height);
         Bitmap firstHalf = originalImage.Clone(rect, originalImage.PixelFormat);
         firstHalf.Save(TempfileName + @"\img" + sequence.ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png);
         return rect;
     }

     public void CreatePdf()
     {
         string imageURL = TempfileName + @"\img.png";

         System.Drawing.Bitmap bitmap = new Bitmap(imageURL);
         System.Drawing.Rectangle rect1 = SplitImage(bitmap, 0, 0, 1024, 1420, 4, 1);
         System.Drawing.Rectangle rect2 = SplitImage(bitmap, 0, 1420, 1024, 1420, 4, 2);
         System.Drawing.Rectangle rect3 = SplitImage(bitmap, 0, 2840, 1024, 1420, 4, 3);
         System.Drawing.Rectangle rect4 = SplitImage(bitmap, 0, 4260, 1024, 1420, 4, 4);

         Document doc = new Document(PageSize.A4, 0f, 0f, 0f, 0f);
         string pdfFilePath = TempfileName;
         PdfWriter writer = PdfAWriter.GetInstance(doc, new FileStream(pdfFilePath + @"\Default.pdf", FileMode.Create));
         doc.Open();
         try
         {
             iTextSharp.text.Image jpg1 = iTextSharp.text.Image.GetInstance(TempfileName + @"\img1.png");
             iTextSharp.text.Image jpg2 = iTextSharp.text.Image.GetInstance(TempfileName + @"\img2.png");

             iTextSharp.text.Image jpg3 = iTextSharp.text.Image.GetInstance(TempfileName + @"\img3.png");

             iTextSharp.text.Image jpg4 = iTextSharp.text.Image.GetInstance(TempfileName + @"\img4.png");
             doc.Add(jpg1);

             doc.NewPage();
             doc.Add(jpg2);

             doc.NewPage();
             doc.Add(jpg3);

             doc.NewPage();
             doc.Add(jpg4);
         }
         catch (Exception ex)
         { }
         finally
         {
             doc.Close();
         }
     }

 }


Что я уже пробовал:

Пожалуйста, смотрите приведенный выше код и, пожалуйста, дайте мне знать, есть ли лучшие варианты для его выполнения.

1 Ответов

Рейтинг:
0

PauloJuanShirt

iTextSharp.текст.Изображение имеет метод ScaleAbsoluteWidth (float newWidth).

Я считаю, что это будет пропорционально масштабироваться.