一个报表同时支持打印为A3和A4怎么办?

shankaipingo 2009-08-03 10:18:48
在以下需求:
在一个报表上,点击一个按钮出现一个radiobutton
"你要打A3呢,还是打A4",确定之后就把A3或者A4横打打出来了.

我觉得这个很有难度:
总要选打印机吧?可能有多个打印机对吧?所以我觉得printdocument可能必不可少?
用默认的打印机?如果可以的话,怎么做?

...全文
242 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shankaipingo 2009-08-16
  • 打赏
  • 举报
回复
哪里解决了哦.都不看问题
回帖者请看
http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079
peng_yaoming 2009-08-16
  • 打赏
  • 举报
回复
回答的都不错,问题应该解决了
chaozi_249 2009-08-16
  • 打赏
  • 举报
回复
窗体创建1个listBox1,txtBox1,3个button
chaozi_249 2009-08-16
  • 打赏
  • 举报
回复

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;


namespace PrintTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

PrintDocument objDocument;
DialogResult resultP;
FontDialog f = new FontDialog();
ColorDialog color = new ColorDialog();

private void button1_Click(object sender, EventArgs e)
{
//初始化打印机设置窗口
PrintDialog priD = new PrintDialog();
//设置当前页按钮为真
priD.AllowCurrentPage = true;
//是否显示帮助按钮
priD.ShowHelp = true;
//是否启用打印到文件按钮
priD.AllowPrintToFile = true;
//是否启用选择按钮
priD.AllowSelection = true;
//是否启用页选项按钮
priD.AllowSomePages = true;
resultP = priD.ShowDialog();
if (resultP == DialogResult.OK)
{
object[] obj = new object[]
{
//获取打印机是否支持双面打印
priD.PrinterSettings.CanDuplex,
//打印文档是否逐份打印
priD.PrinterSettings.Collate,
//获取打印机允许用户打印的最大份数
priD.PrinterSettings.MaximumCopies,
//获取打印文档的份数
priD.PrinterSettings.Copies,
//获取此打印机默认页设置
priD.PrinterSettings.DefaultPageSettings,
//获取双面打印的打印机设置
priD.PrinterSettings.Duplex,
//获取打印第一页的页码
priD.PrinterSettings.FromPage,
//获取该打印机支持的纸张大小
priD.PrinterSettings.PaperSizes,
//获取用户已指定要打印的页码
priD.PrinterSettings.PrintRange,
//获取要打印最后一页的页码
priD.PrinterSettings.ToPage
};
listBox1.Items.AddRange(obj);
}

//初始化要显示的设置窗口
PageSetupDialog objPageSetupDialog = new PageSetupDialog();
objPageSetupDialog.PageSettings = new PageSettings();
objPageSetupDialog.ShowNetwork = false;
//获取文档
objPageSetupDialog.Document = this.objDocument;
//显示窗口
//objPageSetupDialog.ShowDialog();
resultP = objPageSetupDialog.ShowDialog();
if (resultP == DialogResult.OK)
{
object[] resultsP = new object[]{
//获取该页的边距
objPageSetupDialog.PageSettings.Margins,
//获取该页纸张的大小
objPageSetupDialog.PageSettings.PaperSize,
//获取是横向还是纵向打印True为横向
objPageSetupDialog.PageSettings.Landscape,
};
listBox1.Items.AddRange(resultsP);
}

//初始化要预览窗口
PrintPreviewDialog ppvw = new PrintPreviewDialog();
//获取要预览的文档
ppvw.Document = objDocument;
ppvw.Width = 800;
ppvw.Height = 600;
//显示预览窗口
ppvw.ShowDialog();
}

private void Form1_Load(object sender, EventArgs e)
{
objDocument = new PrintDocument();
//当需要为当前页打印的输出时发生
objDocument.PrintPage += new PrintPageEventHandler(objDocument_PrintPage);
}

void objDocument_PrintPage(object sender, PrintPageEventArgs e)
{
string objString = this.textBox1.Text;
//获取用于绘制页面的Graphics的对象
Graphics g = e.Graphics;
//向页面输出一行文字
g.DrawString(objString, f.Font, new SolidBrush(color.Color), new RectangleF(0, 200, textBox1.Width, textBox1.Height));
g.DrawString(objString, f.Font, new SolidBrush(f.Color), new PointF(30,30));
//画一个矩形框
g.DrawRectangle(new Pen(color.Color,2),200,200,200,200);
//打印一张图
Image temp = Image.FromFile(@"D:\网络.png");
Rectangle destRect = new Rectangle(450, 300, temp.Width,temp.Height);
g.DrawImage(temp, destRect, 0, 0, temp.Width, temp.Height, System.Drawing.GraphicsUnit.Pixel);
}

private void btncolor_Click(object sender, EventArgs e)
{
resultP = color.ShowDialog();
if (resultP == DialogResult.OK)
{
object[] obj1 = new object[]
{
color.Color
};
listBox1.Items.AddRange(obj1);
}
}

private void btnFont_Click(object sender, EventArgs e)
{
//对话框中是否显示颜色选择
f.ShowColor = true;
resultP = f.ShowDialog();
if (resultP == DialogResult.OK)
{
object[] obj2 = new object[]
{
f.Font,
f.ShowColor
};
listBox1.Items.AddRange(obj2);
}
}
}
}
chaozi_249 2009-08-16
  • 打赏
  • 举报
回复
默认打印机是在操作系统里面设置为默认的。
shankaipingo 2009-08-15
  • 打赏
  • 举报
回复
Lezen 2009-08-09
  • 打赏
  • 举报
回复
shankaipingo 2009-08-09
  • 打赏
  • 举报
回复
10楼此话怎讲?
问题同:http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079
asuan 2009-08-05
  • 打赏
  • 举报
回复
你需要一个打印设置,每次打印从设置里读取就可以.

不会太难,两张同时打出来都没问题.
xwdd129 2009-08-04
  • 打赏
  • 举报
回复
其实最好的办法是:做两张报表~~就是麻烦了点

因为用PageSize指定页面是可以,但不代表你的报表数据就正好显示在合适的位置!
shankaipingo 2009-08-04
  • 打赏
  • 举报
回复
问题同:http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079
shankaipingo 2009-08-04
  • 打赏
  • 举报
回复
另一个问题,如何设置默认打印机的默认纸张,实际上,我不是用printdocument实现的
shankaipingo 2009-08-03
  • 打赏
  • 举报
回复
恩,那只能用默认的直接打了.
cpp2017 2009-08-03
  • 打赏
  • 举报
回复
this.printDocument1.Print();
不会弹出打印机的选择框.
shankaipingo 2009-08-03
  • 打赏
  • 举报
回复
如果不用默认打印机的话,就要显示出printdialog,让用户去挑选打印机,这样用户可以在首选项那里父盖我们的PaperSize的设定,而我希望用户不能再在此处去选择A3或者A4,这是不必要的选择,不知道明白我的意思没有?
有一种方法是自已写一个custom printdialog,但没找到相关代码.
cpp2017 2009-08-03
  • 打赏
  • 举报
回复
默认打印机不用指定了.
shankaipingo 2009-08-03
  • 打赏
  • 举报
回复
那如何使用默认的打印机了?
cpp2017 2009-08-03
  • 打赏
  • 举报
回复
可以首先生成一个自定义的PageSize对象,
然后赋给PrintDocument对象的DefaultPageSettings.PaperSize属性
,这样可以达到自定义Page大小的目的。
如:
private System.Drawing.Printing.PrintDocument pd;
private StreamReader streamToPrint;

printFont = new Font("Arial", 10);
streamToPrint = new StreamReader ("PrintMe.Txt");
PaperSize pkCustomSize1 = new PaperSize("First custom size", 800,500);

pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
pd.DefaultPageSettings.PaperSize =pkCustomSize1;//将自定义的Papersize赋给PrintDocument
pd.DefaultPageSettings.PaperSize.Height =500;//您可以修改pagesize的大小
pd.DefaultPageSettings
.PaperSize .Width =800;

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧