简体   繁体   English

使用PrintDocument打印多页

[英]Print multiple pages using PrintDocument

I have an issue regarding printing multiple pages using the code below. 我在使用以下代码打印多个页面时遇到问题。 It always prints only the last page. 它总是只打印最后一页。 Can you guys please help me? 你们能帮我吗?

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();
    }
}

And this class: 和这个类:

   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;
                    }
                }
            }

        }

I found a easy solution to my problem after quit some trial and error: 退出一些反复试验后,我找到了解决问题的简便方法:

  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();
                }
            }

The problem was placement of the HasMorePages property. 问题是HasMorePages属性的位置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM