Abhilash.J.A Ответов: 1

Как распечатать все изображения отдельно WPF ?


Всем привет,

Я использую listview со списком изображений. Нажав кнопку listview row, вы получите все выбранные изображения и захотите распечатать эти изображения. Я пытался. После щелчка,

PrintDocument pd = new PrintDocument();
            pd.PrintPage += new PrintPageEventHandler(PrintPage);
            System.Windows.Forms.PrintDialog pdi = new System.Windows.Forms.PrintDialog();
            pdi.Document = pd;
            if (pdi.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {                    
                pd.Print();
            }
            else
            {
                MessageBox.Show("Print Cancelled");
            }


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

После этого кода,

private void PrintPage(object o, PrintPageEventArgs e)
      {
          List<ListViewItemsData> objListViewItemsData = new List<ListViewItemsData>();
          DMSBusinessLayer service = new DMSBusinessLayer();
          List<DocumentsUser> objTble_Documents = new List<DocumentsUser>();
          int UserId = 0;
          string ImgName = string.Empty;
          foreach (DocumentsUser item in listView1.SelectedItems)
          {
              UserId = Convert.ToInt32(item.UserId);
              ImgName = item.Parent_File_Name;
              objTble_Documents = service.PrintUserDocuments(ImgName, UserId).AsEnumerable().Select(m => new DocumentsUser()
              {
                  Child_File_Name = m.Field<string>("Child_File_Name"),
                  FilePath = m.Field<string>("FilePath"),
                  Parent_File_Name = m.Field<string>("Parent_File_Name")
              }).ToList();
          }

          foreach (var i in objTble_Documents)
          {
              objListViewItemsData.Add(new ListViewItemsData()
              {
                  GridViewColumnName_ImageSource = (Convert.ToString(i.FilePath) + Convert.ToString(i.Parent_File_Name) + "_" + Convert.ToString(i.Child_File_Name)),
              });
          }

          foreach (var ii in objListViewItemsData)
          {
              System.Drawing.Image img = System.Drawing.Image.FromFile(ii.GridViewColumnName_ImageSource.ToString());
              System.Drawing.Rectangle m = e.MarginBounds;

              if ((double)img.Width / (double)img.Height > (double)m.Width / (double)m.Height)
              {
                  m.Height = (int)((double)img.Height / (double)img.Width * (double)m.Width);
              }
              else
              {
                  m.Width = (int)((double)img.Width / (double)img.Height * (double)m.Height);
              }
              e.Graphics.DrawImage(img, m);
          }
      }



объект списка 'objListViewItemsData' содержит все изображения, и как я могу распечатать каждый файл изображения отдельно? Пожалуйста, помогите мне...

Afzaal Ahmad Zeeshan

Получите изображение отдельно, а затем выполните функцию печати отдельно. В противном случае создайте один документ с изображением на каждой странице. Где находится ваш объект печати документа?

Abhilash.J.A

@Afzaal : второй.GridViewColumnName_ImageSource.ToString () - это объект print document. Как я могу получить изображение отдельно? Не могли бы вы объяснить, что касается вышеприведенного кода? Я хочу напечатать каждое изображение печати на selepated файл. Пожалуйста

1 Ответов

Рейтинг:
8

Asgard25

Попробовать это

Это должно быть не в вашем методе PrintPage, а скорее при нажатии кнопки.

 Image imgToPrint;
protected void btnPrint_Click(object sender, EventArgs e){
 foreach (var ii in objListViewItemsData)
            {
                System.Drawing.Image img System.Drawing.Image.FromFile(ii.GridViewColumnName_ImageSource.ToString());
       
      imgToPrint = img;
      PrintDocument pd = new PrintDocument();
      pd.OriginAtMargins = true;
      pd.PrintPage += pd_PrintPage;
      pd.DefaultPageSettings.Landscape = true;
      pd.Print();
            }
}


void pd_PrintPage(object sender, PrintPageEventArgs e)
 {
    Point loc = new Point(100, 100);
 e.Graphics.DrawImage(imgToPrint , loc);
 }


Просто установите свои собственные размеры, и он будет печатать каждое изображение как новую страницу(экземпляр).


Abhilash.J.A

@Asgard25-Спасибо, сэр. Он работает нормально. Я столкнулся с другой проблемой, я не могу распечатать все содержимое из списка WPF. Не могли бы вы помочь мне, ответив на этот вопрос? https://www.codeproject.com/Questions/1166691/How-can-I-print-all-contents-of-listview-from-user пожалуйста, помогите мне.