C# 使用多页大小打印文档
在.NET3.5中工作 摘要: 尝试复制现有第三方组件的功能,这在Windows 7中会中断。 到目前为止,用户可以选择一组要打印的图像文件,为每个图像指定页面大小,然后将它们发送到一次性打印。我迫切需要一个关于如何进行打印的概念性解释,在打印每页时动态切换页面大小 详细信息 到目前为止,我已经想出了如何打印多个具有相同页面大小的图像。我使用图像列表并使用C# 使用多页大小打印文档,c#,.net,vb.net,printing,C#,.net,Vb.net,Printing,在.NET3.5中工作 摘要: 尝试复制现有第三方组件的功能,这在Windows 7中会中断。 到目前为止,用户可以选择一组要打印的图像文件,为每个图像指定页面大小,然后将它们发送到一次性打印。我迫切需要一个关于如何进行打印的概念性解释,在打印每页时动态切换页面大小 详细信息 到目前为止,我已经想出了如何打印多个具有相同页面大小的图像。我使用图像列表并使用PrintDocument对象,将PrintPageEventArgs的HasMorePages属性设置为true,直到到达列表末尾 下面是一
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();
}
}
公共部分类表单1:表单
{
私有列表图像{get;set;}
私有打印文档打印文档{get;set;}
公共表格1()
{
初始化组件();
this.images=新列表();
this.images.Add(Image.FromFile(@“C:\test60.bmp”);
this.images.Add(Image.FromFile(@“C:\SuperLargeTest.jpg”);
this.printDocument=新的printDocument()
{
PrinterSettings=新的PrinterSettings()
};
this.printDocument.PrintPage+=printDocument\u PrintPage;
}
私有void printDocument_PrintPage(对象发送者,PrintPageEventArgs e)
{
图形g=e.图形;
e、 PageSettings.PaperSize=this.paperSizes[this.currentImageIndex];
矩形F边缘边界=e.边缘边界;
矩形F printableArea=e.PageSettings.printableArea;
int availableWidth=(int)Math.Floor(printDocument.originalmargins?marginBounds.Width:(e.PageSettings.Landscape?printableArea.Height:printableArea.Width));
int availableHeight=(int)Math.Floor(printDocument.origingalles?marginBounds.Height:(e.PageSettings.Landscape?printableArea.Width:printableArea.Height));
g、 DrawRectangle(Pens.Red,0,0,可用宽度-1,可用高度-1);
g、 DrawImage(此.images[currentImageIndex],可打印区域);
e、 HasMorePages=++currentImageIndex
我真的搞不懂的是如何改变页面大小,比如说,第二张图片。
如果我想让第一张图片用A4打印,然后第二张图片用A3打印,我该怎么做
我发现这似乎建议更改PrintPageEventArgs
中的PageSize
,但在那里没有乐趣
我还尝试使用QueryPageSettingsEventArgs
事件并在那里设置PageSettings
,但这似乎也不起作用
我想实现的是将不同大小的多页打印为一个文档。任何建议,链接,解释,样本代码将非常感谢
C#或VB.NET中的任何东西都可以。在VB.NET中。。你可以用这个潜艇 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
希望对VB.NET中的..有所帮助。。你可以用这个潜艇 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
希望这对我有帮助。这对我来说也很有用 翻译成C#:
这对我来说也是工作 翻译成C#:
如果希望所有页面显示为一个作业(简而言之,避免与其他作业交叉),可以通过更改PrintDocument对象的默认页面大小来设置PrintPage事件处理程序中下一页的页面大小。如果希望所有页面显示为一个作业(简而言之,避免与其他作业交叉),通过更改PrintDocument对象的默认页面大小,可以在PrintPage事件处理程序中设置下一页的页面大小