如何自己的页面

问题描述:

我构建上有两个相似图片的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

让我们知道如何去!

+0

凯西感谢您的回复。我需要两页打印的原因是因为一张图片是一张表格的正面,另一张是背面。 ashx页面只有图像,没有别的。现在,我已取消注释'Page.ClientScript.RegisterClientScriptBlock(...)'在'Print_Click(...)'上的注释并评论其他行。我已经尝试了您的建议,但仍然只有一页打印有两张图像。我可能没有正确使用你的建议。 – Pabinator 2014-12-03 16:16:16

+0

嗯。我承认我没有试过这个。我曾经使用过CSS分页符,并取得了成功。也许尝试将每个图像包装在div标签中,然后将样式放在div上? – 2014-12-03 16:23:47

+0

几乎相同。由于div标签,两幅图像都在一个页面上,但现在一个在另一个上面。 – Pabinator 2014-12-03 16:31:54

凯西的答案帮了很大忙。这是最后的结果。

页眉代码:

<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); 
}