使用多种页面大小的PrintDocument
本文关键字:PrintDocument | 更新日期: 2023-09-27 18:18:05
在。net 3.5中工作。
简介:
试图复制现有第三方组件的功能,该组件在Windows 7中失效。到目前为止,用户可以选择一堆要打印的图像文件,为每个图像指定一个页面大小,然后将它们发送出去一次性打印。我迫切需要一个关于如何在打印每页时切换页面大小的概念解释。
到目前为止,我已经弄清楚如何打印多个图像都具有相同的页面大小。我使用图像列表并使用PrintDocument
对象,将PrintPageEventArgs
的HasMorePages
属性设置为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问题,它似乎建议改变PrintPageEventArgs
中的PageSize
,但没有快乐。
我还尝试使用QueryPageSettingsEventArgs
事件并设置PageSettings
在那里,但这似乎也不起作用…
我想实现的是打印不同大小的多个页面作为一个单一的文件。任何建议,链接,解释,示例代码将非常感激。
c#或VB中的任何东西。
这也是我的工作。
翻译成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;
}
在VB中。网你可以使用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
如果您希望所有页面显示为一个作业(简而言之,避免与其他作业交错),您可以通过更改PrintDocument对象的默认页面大小在PrintPage事件处理程序中设置下一页的页面大小。