使用.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中的任何内容都可以。
答案 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
希望这有帮助..