如何自己的页面
问题描述:
我构建上有两个相似图片的ASP网站页面上打印与点击两个图像,但每幅图像:如何自己的页面
<asp:Image ID="ImgPg1" runat="server" ImageUrl="Page1.ashx" />
<asp:Image ID="ImgPg2" runat="server" ImageUrl="Page2.ashx" />
我想用一个打印两个图像单击。
上Page1.ashx
的图像需要第1页上打印,需要在第2页
要打印你怎么每页打印一个图像上Page2.ashx
的形象呢?
这就是我所做的,但我发现PrintDocument
在服务器端运行,所以出现一个错误说“找不到打印机”。下面的代码示例打印一个矩形作为测试,但它是.ashx页面对它们的反正。
protected void Print_Click(object sender, EventArgs e)
{
// Page.ClientScript.RegisterClientScriptBlock(GetType(), "Print CI", "window.print()", true);
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.Landscape = false;
nPage = 0;
pd.PrintPage += new PrintPageEventHandler(printImages);
pd.Print();
}
private void printImages(object sender, PrintPageEventArgs ev)
{
Rectangle rect = new Rectangle(0, 0, 353, 230); // 0.236 Inches @ 96 dpi = 23
switch (nPage)
{
case 0: // Page 1 just for test
ev.Graphics.FillRectangle(new SolidBrush(Color.LightGray), rect);
ev.Graphics.DrawRectangle(new Pen(Color.Black, 1), rect);
break;
case 1: // Page 2 just for test
rect = new Rectangle(360, 0, 353, 230);
ev.Graphics.FillRectangle(new SolidBrush(Color.LightPink), rect);
ev.Graphics.DrawRectangle(new Pen(Color.Black, 1), rect);
break;
}
++nPage;
if (nPage < 2)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
我之所以需要打印一个图像每页是因为一个图像是一种形式的前部,另一形象是它的背面。图像尺寸小于8.5 x 11的纸张(大约1/4的纸张)。
感谢, 巴勃罗
答
你真的要惹试图编程方式发送的东西到打印机身边?除非有良好的商业原因,否则我认为'最好的例子'是将你的.ashx页面创建为一个打印友好的页面,只有两个图像,然后让用户从浏览器打印页面。
但是......要回答您的实际问题,为了确保在不同页面上打印两个图像,您可以在两者之间使用CSS分页符。
.PageBreak {
page-break-after: always;
}
<asp:Image ID="ImgPg1" runat="server" ImageUrl="Page1.ashx" CssClass="PageBreak" />
<asp:Image ID="ImgPg2" runat="server" ImageUrl="Page2.ashx" />
这将强制打印机在第一张图像之后和第二张之前输入新的纸张。假设图像大小适合8.5 x 11的纸张,这应该工作得很好。在分页-后
更多信息: http://www.w3schools.com/cssref/pr_print_pageba.asp
而且,很多伟大的.ashx的提示的位置: http://www.dotnetperls.com/ashx
让我们知道如何去!
答
凯西的答案帮了很大忙。这是最后的结果。
页眉代码:
<script type="text/javascript">
function printCI() {
var printWindow = window.open('', 'CI', 'height=600,width=800');
printWindow.document.write('<html><head><title>CI Form</title>');
printWindow.document.write('<style>.PageBreak{page-break-after: always;}</style>');
printWindow.document.write('</head><body >');
printWindow.document.write('<div class=\'PageBreak\'><img src=\'Page1.ashx\' /></div>');
printWindow.document.write('<div><img src=\'Page2.ashx\' /></div>');
printWindow.document.write('</body></html>');
printWindow.document.close();
printWindow.print();
}
</script>
CS代码:
protected void Print_Click(object sender, EventArgs e)
{
// Print CI with a javascript so we can print in two pages
Page.ClientScript.RegisterClientScriptBlock(GetType(), "Print CI", "printCI()", true);
}
凯西感谢您的回复。我需要两页打印的原因是因为一张图片是一张表格的正面,另一张是背面。 ashx页面只有图像,没有别的。现在,我已取消注释'Page.ClientScript.RegisterClientScriptBlock(...)'在'Print_Click(...)'上的注释并评论其他行。我已经尝试了您的建议,但仍然只有一页打印有两张图像。我可能没有正确使用你的建议。 – Pabinator 2014-12-03 16:16:16
嗯。我承认我没有试过这个。我曾经使用过CSS分页符,并取得了成功。也许尝试将每个图像包装在div标签中,然后将样式放在div上? – 2014-12-03 16:23:47
几乎相同。由于div标签,两幅图像都在一个页面上,但现在一个在另一个上面。 – Pabinator 2014-12-03 16:31:54