2014-04-02 119 views
0

我有关于使用下面的代码打印多个页面的问题。它总是只打印最后一页。你们能帮我吗?使用PrintDocument打印多个页面

using (var rasterizer = new PdfRasterizer(pdfInputPdf)) 
{ 
    // Create a JpegImageFormat object. 
    var jpegImageFormat = new JpegImageFormat(100); 

    // Create a FixedImageSize object with required width and height. 
    var imageSize = new PercentageImageSize(400); 

    // Save the image. 
    var imageData = rasterizer.Draw(jpegImageFormat, imageSize); 

    using (var pd = new PrintDocument()) 
    { 
     var margins = new Margins(0, 40, 0, 40); 
     pd.DefaultPageSettings.Margins = margins; 
     pd.DefaultPageSettings.Color = true; 
     pd.DefaultPageSettings.Landscape = false; 

     pd.PrintPage += (sender, args) => 
         { 
          PrintPage(text1, text2, imageData, pd, args); 
         }; 

     pd.Print(); 
    } 
} 

这个类:

private static int counter = 0; 
     private static void PrintPage(string text1, string text2, byte[][] imageData, PrintPageEventArgs args) 
     { 

      foreach (var b in imageData) 
      { 
       using (var stream = new MemoryStream(b)) 
       { 
        var i = Image.FromStream(stream); 

        CreateNotApprovedWatermark(i, text1, text2); 

        if (args.PageSettings.PrinterSettings.CanDuplex) 
        { 
         args.PageSettings.PrinterSettings.Duplex = Duplex.Horizontal; 
        } 

        var m = args.MarginBounds; 

        if (i.Width/(double)i.Height > m.Width/(double)m.Height) // image is wider 
        { 
         m.Height = (int)(i.Height/(double)i.Width * m.Width); 
        } 
        else 
        { 
         m.Width = (int)(i.Width/(double)i.Height * m.Height); 
        } 
        args.Graphics.DrawImage(i, m); 
        if (counter <= 2) 
        { 
         counter++; 
         args.HasMorePages = true; 
        } 
        else 
        { 
         args.HasMorePages = false; 
        } 
       } 
      } 

     } 
+2

您不能在PrintPage事件处理程序中使用foreach。你需要每页做一个元素。添加一个索引变量,使用BeginPrint事件处理程序将其设置为0,为每个页面增加它。 –

回答

0

我发现了一个简单的解决我的问题退出一些试验和错误后:

using (var rasterizer = new PdfRasterizer(new Foxit.PDF.Rasterizer.InputPdf(pdfData))) 
      { 
       // Create a JpegImageFormat object. 
       var jpegImageFormat = new JpegImageFormat(100); 

       // Create a FixedImageSize object with required width and height. 
       var imageSize = new PercentageImageSize(400); 

       // Save the image. 
       var imagePages = rasterizer.Draw(jpegImageFormat, imageSize); 

       using (var pd = new PrintDocument()) 
       { 
        var margins = new Margins(0, 40, 0, 40); 
        pd.DefaultPageSettings.Margins = margins; 
        pd.DefaultPageSettings.Color = true; 
        pd.DefaultPageSettings.Landscape = false; 

        var pageNumber = 0; 

        pd.PrintPage += (sender, args) => 
        { 
         PrintPage(pageNumber, text1, text2, imagePages[pageNumber], args); 
         if (pageNumber < imagePages.Count()) 
         { 
          pageNumber++; 
          args.HasMorePages = pageNumber != imagePages.Count(); 
         } 
        }; 

        pd.Print(); 
       } 
      } 

问题是HasMorePages属性的位置。