在 .NET 3.5 中工作。
概括:
试图复制现有第三方组件的功能,这在 Windows 7 中中断。到目前为止,用户可以选择一堆图像文件进行打印,为每个图像指定页面大小,然后一次性将它们发送出去进行打印。我急需一个关于如何在打印每一页时动态切换页面大小的概念解释。
细节
到目前为止,我已经弄清楚如何打印多个具有相同页面大小的图像。我使用图像列表并使用PrintDocument
对象,将HasMorePages
属性设置PrintPageEventArgs
为 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,它似乎建议更改PageSize
中的PrintPageEventArgs
,但在那里没有任何乐趣。
我也尝试使用该QueryPageSettingsEventArgs
事件并将其设置在PageSettings
那里,但这似乎也不起作用......
我想要实现的是将多个不同大小的页面打印为一个文档。任何建议、链接、解释、示例代码将不胜感激。
C# 或 VB.NET 中的任何内容都可以。