PrintDocument使用多个页面大小

时间:2013-06-12 09:54:34

标签: c# .net vb.net printing

使用.NET 3.5。

要点:

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

详情

到目前为止,我已经想出了如何使用相同的页面大小打印多个图像。我使用了一个图像列表并使用PrintDocument对象,将HasMorePages的{​​{1}}属性设置为true,直到我到达列表的末尾。

这是一个我快速聚集在一起测试的课程:

PrintPageEventArgs

我真的无法弄清楚的是如何改变第二张图片的页面大小。 如果我想在A4中打印第一张图像然后在A3上打印第二张图像,我该怎么做呢?

我发现此SO question here似乎建议更改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(); } } 中的PageSize,但在那里没有任何欢乐。

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

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

C#或VB.NET中的任何内容都可以。

2 个答案:

答案 0 :(得分:2)

这也适合我。

转换为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;
    }

答案 1 :(得分:1)

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

DocPrint是PrintDocument var

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

希望这有帮助..