1

我正在尝试打印具有多个帧的单个 tiff 文件。但是,如果我使用 javascript (window.print()),我会打印出整个网页,而不仅仅是 tiff 图像。

所以我环顾 StackOverflow 并找到了一些示例代码。我试图实现它,但问题是代码适用于绝对图像 URL :- 例如“C:\img.jpeg”

我想知道是否有人可以告诉我如何将我的 imgFax.ImageUrl 转换为实际的图像名称?(否则我会收到一个错误:-“路径中的非法字符”<--- 在我的 System.Drawing.Image img = System.Drawing.Image.FromFile(imgFax.ImageUrl); 代码中)

如果有人可以向我展示一些示例代码,那就太棒了!谢谢。

protected void PrintAll_Click(object sender, EventArgs e) 
{ 
  // number of frames 
  int number = _FaxPages.Count; 


 // for loop to iterate through each frame 
 for (int i = 0; i < number; i++) 
  { 
     // fax ID 
     string _FaxId = Page.Request["FaxId"]; 

     //string _Frame = Page.Request["Frame"]; 

     // current frame 
     _PageIndex = i; 

     // IMG URL 
     imgFax.ImageUrl = "ShowFax.ashx?n=" + _FaxId + "&f=" + _PageIndex + "&mw=750"; 



     PrintDocument pd = new PrintDocument(); 

     pd.PrintPage += PrintPage; 
     pd.Print();   

 }      

}

private void PrintPage(object o, PrintPageEventArgs e) 
{ 
   System.Drawing.Image img = System.Drawing.Image.FromFile(imgFax.ImageUrl); 
   Point loc = new Point(100, 100); 
   e.Graphics.DrawImage(img, loc); 
} 
4

3 回答 3

1

我不确定您是否可以通过 PrintDocument 在 ASP 中进行任何打印。这都是服务器端代码,而打印将在 -并由客户端的浏览器完成。我认为您必须通过 JavaScript 来完成,但不能打印整个页面 - 您必须创建另一个页面,仅显示要打印的内容,然后将用户重定向到那个较小的页面(例如在弹出窗口),然后通过 javascript 自动打印。我不是 100% 确定,但我使用的所有银行网站似乎都遵循这一点,这在一般情况下很常见。

例如,这是一篇采用这种精确方法的文章: http: //www.dotnetcurry.com/ShowArticle.aspx?ID=92

请记住,您的小“打印页面”实际上应该显示您要打印的内容:)

关于打印图像的另一个不错的链接:http ://forums.asp.net/post/3369436.aspx

于 2012-10-01T20:35:35.013 回答
0

您可以将单个 tiff 图像拆分为单独的文件,如此处所示然后您可以为每个图像拥有一个唯一的 URL:

static String[] SplitFile(String file_name)
{
    System.Drawing.Image imageFile = System.Drawing.Image.FromFile(file_name);
    System.Drawing.Imaging.FrameDimension frameDimensions = new System.Drawing.Imaging.FrameDimension(imageFile.FrameDimensionsList[0]);
    int NumberOfFrames = imageFile.GetFrameCount(frameDimensions);
    string[] paths = new string[NumberOfFrames];
    for (int intFrame = 0; intFrame < NumberOfFrames; ++intFrame)
    {
        imageFile.SelectActiveFrame(frameDimensions, intFrame);
        Bitmap bmp = new Bitmap(imageFile);
        paths[intFrame] = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + @"\" + intFrame.ToString() + ".tif";
        bmp.Save(paths[intFrame], System.Drawing.Imaging.ImageFormat.Tiff);
        bmp.Dispose();
    }
    imageFile.Dispose();
    return paths;
}
于 2012-10-01T20:35:52.573 回答
0

嗯,好的.. 我知道我已经回答了一些问题,但我注意到您已将问题标记为粗体.. 所以这里是:您不能,没有办法。

您拥有的指向图像的 URL 只是一个 Internet 链接。它可能指向图像、网站或一些二进制数据。远程网络服务器读取 URL 参数并决定如何处理它。根本没有文件名。只有网页“ShowFax.ashx”的 URL 及其参数。

某些网页可能会返回一个特殊的标题、内容处置/附件,并且在该标题中它们有时可能会为您提供一个文件名。这就是“下载”网页向浏览器提供信息的方式,因此它可能会向用户显示“将文件另存为..”窗口。但是,情况可能并非如此。您在一个简单地从 URL 读取图像的 aspx 控件中显示图像。这一切都是由控件自动完成的,因此您甚至没有机会查看标头 - 当然,除非您手动发送请求、捕获流、查看、将其重定向回控件等。恕我直言,太多了为简单的打印任务而工作,而这仅仅是个开始!

于 2012-10-01T20:56:32.720 回答