2008-12-31 6 views
1

J'écris du code C# dans Winforms .Net 2008. J'ai créé une fenêtre d'aperçu avant impression pour créer un rapport. Cela fonctionne bien, je peux prévisualiser le rapport, puis l'imprimer. Le seul problème est qu'il n'est pas aussi flexible que l'aperçu Office Print. Les utilisateurs ne peuvent pas choisir une imprimante autre que l'imprimante par défaut et ils ne peuvent pas limiter l'impression à certaines pages. Il me manque peut-être quelques propriétés dont j'ai besoin.Utilisation de l'aperçu avant impression dans Winforms .Net

Voici une partie du code que j'utilise:

PrintDocument pd = new PrintDocument(); 
      pd.PrintPage += new PrintPageEventHandler(this.PrintTheGraph); 
      pd.DefaultPageSettings.Landscape = true; 
      // Allocate a print preview dialog object. 
      PrintPreviewDialog dlg = new PrintPreviewDialog(); 
      dlg.Width = 100; 
      dlg.MinimumSize = new Size(375, 250); 
      dlg.SetBounds(100, -550, 800, 800); 
      dlg.Document = pd; 
      DialogResult result = dlg.ShowDialog(); 

Merci,

Bob

+0

Vous n'appelez jamais pd.Print() dans ce code. Où cela arrive-t-il? –

Répondre

5

Aperçu avant impression et impression sont différentes fonctions et doivent être différentes options de menu. Choisir l'aperçu avant impression ne devrait pas imprimer votre document, il est tout à fait probable qu'un utilisateur voudrait voir à quoi ressemble son document sur une page sans l'imprimer réellement.

Pour imprimer une page et de permettre la sélection d'appareils d'impression, utilisez:

PrintDialog pDialog = new PrintDialog(); 
pDialog.Document = printDocument; 
if (pDialog.ShowDialog() == DialogResult.OK) { 
    printDocument.DocumentName = fileName; 
    printDocument.Print(); 
    }

La classe PrintDialog a une UseEXDialog propriété que vous pouvez utiliser pour afficher une boîte de dialogue Mise en page élargie avec des sélections d'impression, des plages, n opérations d'impression , et. Al. Manipuler toutes ces options est beaucoup de travail, d'abord PrintDialog de travail.

0

merci

public OpenFileDialog dlg; private PrintDocument printDocument = new PrintDocument(); private void FileUpload_Click (expéditeur d'objet, EventArgs e) { dlg = new OpenFileDialog(); dlg.Filter = "Fichier Doc (.doc, .docx) | .pdf, * .xls, .xlsx , txt.";

 if (dlg.ShowDialog() == DialogResult.OK) 
      txtFilename.Text = dlg.FileName; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     label2.Text = txtFilename.Text; 
     string sFileName = ""; 
     long nLength = 0; 
     byte[] barFile = null; 
     if (dlg.FileName != "") 
     { 
      System.IO.FileStream fs = new System.IO.FileStream(dlg.FileName, System.IO.FileMode.Open); 
      System.IO.FileInfo fileInfo = new System.IO.FileInfo(dlg.FileName); 
      sFileName = fileInfo.Name; 
      nLength = fs.Length; 
      barFile = new byte[fs.Length]; 
      fs.Read(barFile, 0, Convert.ToInt32(fs.Length)); 
      fs.Close(); 
      PrintDialog pDialog = new PrintDialog(); 
      pDialog.Document = printDocument; 
      if (pDialog.ShowDialog() == DialogResult.OK) 
      { 
       printDocument.DocumentName = dlg.FileName; 
       printDocument.Print(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Please Select the File For File Upload"); 
     } 
    } 
+0

Veuillez essayer d'expliquer comment votre solution correspond aux besoins OP. Publier du code sans explication n'est pas une réponse. – Artemix

Questions connexes