【问题标题】:How to print a huge number of images in Asp.Net?如何在 Asp.Net 中打印大量图像?
【发布时间】:2013-08-26 14:14:46
【问题描述】:

我有PrintTest.aspx 页面从数据库加载图像路径并将其呈现在 div 中以打印 这些图像可能多达 20000 张图像

       for (int i = 0; i < Files.Count; i++)
    {
    HtmlImage image=new HtmlImage();
        image.ID="ImageAN"+i.ToString();
        image.Src=Files[i].ToString();
        image.Alt="PrintImage";
        image.Attributes.Add("class","PrintImage");

    div_Print.Controls.Add(image);
    }

然后调用JavaScript函数打印div_Print的内容

 this.ClientScript.RegisterStartupScript(this.GetType(), "ClientScript", " PrintContent('div_Print')", true);

java脚本函数>

 <script type="text/javascript">
function PrintContent(divName) {
    var DocumentContainer = document.getElementById(divName);
    var WindowObject = window.open();
    WindowObject.document.writeln(DocumentContainer.innerHTML);
    WindowObject.document.close();
    WindowObject.focus();
    WindowObject.print();
    WindowObject.close();
}
</script>

但是这种情况会导致我的浏览器不断崩溃并关闭。

我希望任何情况下都可以避免这种情况或打印图像而不在 HTML 中呈现它

【问题讨论】:

  • 这对于网络浏览器来说太多了,您必须将其分成单独的块,并且一次打印更少的图像。
  • @bfavaretto,这没有意义。数据将在 n 时间内假脱机到打印机,是吗?谁在乎页面有多大,打印需要很长时间。
  • @neoistheone 我相信浏览器甚至在向打印机发送任何内容之前就崩溃了......如果例如每张图片50KB,整页1GB!

标签: c# javascript jquery asp.net printing


【解决方案1】:

你没有。这就是人们发明分页和搜索的原因。

这有几个原因:

  • 内存是一种有限的资源,尤其是在移动设备上(如果您支持的话)
  • TMI,如果不花几个小时盯着它,人们无法直观地理解放在单个页面上的 20k 图像

类似的东西

public ControlsTypeHere PrintImages(int take, int skip)
{
    int filesPrinted;

    for (int i = skip; i < Files.Count; i++)
    {
        if(filesPrinted >= take)
            break;

        HtmlImage image=new HtmlImage();
        image.ID="ImageAN"+i.ToString();
        image.Src=Files[i].ToString();
        image.Alt="PrintImage";
        image.Attributes.Add("class","PrintImage");

        div_Print.Controls.Add(image);

        filesPrinted++;
    }

    return div_Print.Controls;
}

【讨论】:

  • 好的,有任何方法可以打印,将这些图像分成多个阶段,每个阶段包含 100 个图像或类似的东西
  • 是的,但这取决于您的技术。这个想法是你有一个图像源(数据库,文件系统),你可以从源中枚举图像。一旦你读取了一个块,你就处理它(打印,显示给用户)。如果用户/进程请求更多,则读取下一个块。所以你的阅读函数需要接受两个参数:skip 和 take。 Skip 告诉函数你已经处理了多少图像,而 take 告诉它要返回多少新图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2018-09-04
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多