C# 使用多页大小打印文档

C# 使用多页大小打印文档,c#,.net,vb.net,printing,C#,.net,Vb.net,Printing,在.NET3.5中工作 摘要: 尝试复制现有第三方组件的功能,这在Windows 7中会中断。 到目前为止,用户可以选择一组要打印的图像文件,为每个图像指定页面大小,然后将它们发送到一次性打印。我迫切需要一个关于如何进行打印的概念性解释,在打印每页时动态切换页面大小 详细信息 到目前为止,我已经想出了如何打印多个具有相同页面大小的图像。我使用图像列表并使用PrintDocument对象,将PrintPageEventArgs的HasMorePages属性设置为true,直到到达列表末尾 下面是一

在.NET3.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();
    }
}
公共部分类表单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事件处理程序中设置下一页的页面大小