【问题标题】:PrintDocument using multiple page sizes使用多种页面尺寸的 PrintDocument
【发布时间】:2013-06-12 09:54:34
【问题描述】:

在 .NET 3.5 中工作。

总结:

试图复制现有第三方组件的功能,这在 Windows 7 中中断。 到目前为止,用户可以选择要打印的一堆图像文件,为每个图像指定一个页面大小,然后将它们发送出去以一次性打印。我急需一个关于如何在打印每一页时动态切换页面大小的概念解释。

详情

到目前为止,我已经弄清楚了如何打印多个具有相同页面大小的图像。我使用图像列表并使用PrintDocument 对象,将PrintPageEventArgsHasMorePages 属性设置为true,直到到达列表末尾。

这是我快速拼凑起来测试的一个类:

public partial class Form1 : Form
{
    private List<Image> images { get; set; }

    private PrintDocument printDocument { get; set; }

    public Form1()
    {
        InitializeComponent();

        this.images = new List<Image>();
        this.images.Add(Image.FromFile(@"C:\test60.bmp"));
        this.images.Add(Image.FromFile(@"C:\SuperLargeTest.jpg"));

        this.printDocument = new PrintDocument()
        {
            PrinterSettings = new PrinterSettings()
        };
        this.printDocument.PrintPage += printDocument_PrintPage;
    }

    private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {
        Graphics g = e.Graphics;

        e.PageSettings.PaperSize = this.paperSizes[this.currentImageIndex];

        RectangleF marginBounds = e.MarginBounds;
        RectangleF printableArea = e.PageSettings.PrintableArea;

        int availableWidth = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Width : (e.PageSettings.Landscape ? printableArea.Height : printableArea.Width));
        int availableHeight = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Height : (e.PageSettings.Landscape ? printableArea.Width : printableArea.Height));
        g.DrawRectangle(Pens.Red, 0, 0, availableWidth - 1, availableHeight - 1);
        g.DrawImage(this.images[currentImageIndex], printableArea);

        e.HasMorePages = ++currentImageIndex < this.images.Count();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.printDocument.OriginAtMargins = false;
        this.printDocument.Print();
    }
}

我真的不知道如何去改变页面大小,比如第二张图片。 如果我想用 A4 打印第一张图片,然后用 A3 打印第二张图片,我该怎么做?

我发现了这个SO question here,它似乎建议更改PrintPageEventArgs 中的PageSize,但那里没有任何乐趣。

我也尝试使用QueryPageSettingsEventArgs 事件并在那里设置PageSettings,但这似乎也不起作用...

我想要实现的是将多个不同大小的页面打印为一个文档。非常感谢任何建议、链接、解释、示例代码。

C# 或 VB.NET 中的任何东西都可以。

【问题讨论】:

    标签: c# .net vb.net printing


    【解决方案1】:

    这对我也有用。

    翻译成C#:

        private bool SetPaperSize(PrintDocument pd, PaperKind nKind)
        {
            foreach(System.Drawing.Printing.PaperSize ps in pd.PrinterSettings.PaperSizes)
            {
                if (ps.Kind == nKind)
                {
                    pd.DefaultPageSettings.PaperSize = ps;
                    return true;
                }
            }
    
            return false;
        }
    

    【讨论】:

      【解决方案2】:

      在 VB.NET 中..你可以使用这个 Sub ..

      DocPrint 是 PrintDocument 变量

      Sub SetPaperSize(ByVal nKind As PaperKind)
              Dim ps As PaperSize
      
              For ix As Integer = 0 To DocPrint.PrinterSettings.PaperSizes.Count - 1
                  If DocPrint.PrinterSettings.PaperSizes(ix).Kind = nKind Then
                      ps = DocPrint.PrinterSettings.PaperSizes(ix)
                      DocPrint.DefaultPageSettings.PaperSize = ps
                  End If
              Next
          End Sub
      

      希望对您有所帮助..

      【讨论】:

        【解决方案3】:

        如果您希望所有页面显示为一个作业(简而言之,避免与其他作业交错),您可以通过更改 PrintDocument 对象的默认页面大小在 PrintPage 事件处理程序中设置下一页的页面大小.

        【讨论】:

          猜你喜欢
          • 2016-05-16
          • 1970-01-01
          • 2020-08-17
          • 1970-01-01
          • 1970-01-01
          • 2014-09-04
          • 2013-02-05
          • 2012-02-17
          • 1970-01-01
          相关资源
          最近更新 更多