设置纸张大小

14
请帮我解决如何在C#代码中设置纸张大小的问题。我正在使用printDocument API。
以下是我的代码:
 ppvw = new PrintPreviewDialog();
 ppvw.Document = printDoc;
 ppvw.PrintPreviewControl.StartPage = 0;
 ppvw.PrintPreviewControl.Zoom = 1.0;
 ppvw.PrintPreviewControl.Columns = 10;


 // Showing the Print Preview Page
 printDoc.BeginPrint += new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
 printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);


 if (ppvw.ShowDialog() != DialogResult.OK)
 {
     printDoc.BeginPrint -= new System.Drawing.Printing.PrintEventHandler(PrintDoc_BeginPrint);
     printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
 }


 printDoc.PrinterSettings.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("a2", 5.0,5.0);
 printDoc.Print();

2
你遇到了什么错误? - Shoban
5个回答

30
PrinterSettings ps = new PrinterSettings();
PrintDocument recordDoc = new PrintDocument();
recordDoc.PrinterSettings = ps;

这里有一种按种类设置纸张大小的方法,比如“A4”

IEnumerable<PaperSize> paperSizes = ps.PaperSizes.Cast<PaperSize>();
PaperSize sizeA4 = paperSizes.First<PaperSize>(size => size.Kind == PaperKind.A4); // setting paper size to A4 size
recordDoc.DefaultPageSettings.PaperSize = sizeA4;

这里是另一种设置自定义纸张大小的方法

recordDoc.DefaultPageSettings.PaperSize = new PaperSize("210 x 297 mm", 800, 800);
PrintPreviewDialog ppvw = new PrintPreviewDialog();
ppvw .Document = recordDoc;
ppvw.ShowDialog();

希望它能够运作。


7
请问,您说的800、800是什么意思? - Fawad
2
@Fawad 在这个构造函数中,PaperSize类接受3个参数:1-纸张名称与第2和第3个参数无关 2-纸张的宽度 3-纸张的高度请查看以下链接获取详细信息。 https://msdn.microsoft.com/zh-cn/library/7dbh1cyh(v=vs.110).aspx https://msdn.microsoft.com/zh-cn/library/system.drawing.printing.papersize(v=vs.110).aspx - Mawardy
3
@Fawad: 800,800指定了页面大小为8英寸 x 8英寸(宽度和高度以每英寸的百分之一为单位)。 - Jeff Roe

1

纸张大小的构造函数是PaperSize(String, Int32, Int32)

5.0(5)X 5.0(5)太小了,除非“自定义大小”是您的字符串..或者A2的420 x 594...

还可以尝试枚举打印机.PaperSizes中的每个PaperSize大小,并检查是否存在A2..或者不..

默认情况下,它将Rawkind设置为custom,您还需要按照http://msdn.microsoft.com/en-us/library/system.drawing.printing.papersize.rawkind.aspx中所述设置Rawkind。


谢谢回复...但是如果我输入420X594,它只显示A4纸张大小...请告诉我如何设置自定义大小。 - rajaneesh

0

试一下这个。我认为这段代码会帮助你解决这个问题。

Private Sub bt_Save_Click(sender As Object, e As EventArgs) Handles bt_Save.Click
    MsgBox("Saved", MsgBoxStyle.Information)
    If MsgBox("you want to print now?", MsgBoxStyle.Question + vbOKCancel, "Printing") = MsgBoxResult.Ok Then
        Try
            PrintPreviewDialog1.Document = ImportBillPrintDocument
            ImportBillPrintDocument.PrinterSettings.DefaultPageSettings.PaperSize = pkCustomSize1
            ImportBillPrintDocument.DefaultPageSettings.PaperSize = pkCustomSize1

            PrintPreviewDialog1.WindowState = FormWindowState.Maximized
            PrintPreviewDialog1.ShowDialog()
        Catch ex As Exception

        End Try

    End If
End Sub

如果您不记录pkCustomSize1值,它如何解决问题?永远不要使用空的Try-Catch。这个问题是关于C#的。 - LarsTech
Dim pkCustomSize1 As New PaperSize("自定义", 810, HeightVar) 我只会写vb.net,不会写c#。 - Sarunpong P.
如果您不使用 Try-Catch,这段代码将无法正常工作。 - Sarunpong P.
我并没有说不要使用Try-Catch——“空”是重要的词。 - LarsTech
好的,我刚刚使用了try-catch结构并留空,因为我不想在那个时候显示错误异常,但现在我插入了msgbox()以便在用户查找错误位置时显示发现的错误代码。但是如果你想要获取一个异常,可以插入msgbox(ex.tostring) - Sarunpong P.

0

我正在使用Visual Basic,通过这段代码,我可以在打印预览中显示整个表单,但右侧会留下一小部分被切割的页面。

PrintForm1.Form = Me
PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = True
PrintForm1.PrinterSettings.DefaultPageSettings.PaperSize = New Printing.PaperSize("Custom", Me.Height, (Me.Width + 47))
PrintForm1.PrinterSettings.DefaultPageSettings.Margins = New Printing.Margins(3, 3, 3, 3)
PrintForm1.PrinterSettings.DefaultPageSettings.PaperSize.RawKind = Printing.PaperKind.A4Small
PrintForm1.PrintAction = Printing.PrintAction.PrintToPreview    'PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
PrintForm1.Print()  'PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)  '

-1
您可以按照以下方式使用,用户可以在设置表单中设置页面大小。
        private void button1_Click(object sender, EventArgs e)
        {
            PrintDialog printdg = new PrintDialog();
            if (printdg.ShowDialog() == DialogResult.OK)
            {
                PrintDocument pd = new PrintDocument();
                pd.PrinterSettings = printdg.PrinterSettings;
                pd.PrintPage += PrintPage;
                pd.Print();
                pd.Dispose();
            }
        }
        private void PrintPage(object o, PrintPageEventArgs e)
        {
           // Printng logic
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接