首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多页大小的PrintDocument

使用多页大小的PrintDocument
EN

Stack Overflow用户
提问于 2013-06-12 09:54:34
回答 3查看 2.5K关注 0票数 0

在.NET 3.5中工作。

摘要:

试图复制现有第三方组件的功能,该组件在Windows 7中中断。到目前为止,用户可以选择一组图像文件打印,为每个图像指定一个页面大小,然后将它们发送出去,一次打印所有文件。在打印每一页时,我迫切需要一个概念上的解释,说明如何进行打印,动态切换页面大小。

详细信息

到目前为止,我已经知道如何打印多个图像,所有相同的页面大小。我使用图像列表并使用PrintDocument对象,将PrintPageEventArgsHasMorePages属性设置为true,直到到达列表的末尾为止。

下面是我迅速拼凑在一起来测试这个的一个类:

代码语言:javascript
复制
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 here似乎建议改变PrintPageEventArgs中的PageSize,但那里没有joy。

我还尝试使用QueryPageSettingsEventArgs事件并在那里设置PageSettings,但这似乎也不起作用.

我想要实现的是打印多页大小不同的单一文件。任何建议、链接、解释、示例代码都将不胜感激。

C#或VB.NET中的任何东西都可以。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-12 13:29:38

在VB.NET ..。你可以用这个子..。

DocPrint是PrintDocument var

代码语言:javascript
复制
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

希望能帮上忙..。

票数 1
EN

Stack Overflow用户

发布于 2014-01-07 10:43:53

这也是我的工作。

翻译成C#:

代码语言:javascript
复制
    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;
    }
票数 2
EN

Stack Overflow用户

发布于 2017-05-11 15:08:22

如果希望所有页面都显示为一个作业(简而言之,避免与其他作业交织),则可以通过更改PrintPage对象的默认页大小来设置PrintDocument事件处理程序中下一页的页大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17062558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档