C# 组合流:Web应用程序

C# 组合流:Web应用程序,c#,asp.net,pdf,merge,stream,C#,Asp.net,Pdf,Merge,Stream,这个问题主要涉及.net中web应用程序中的流。在我的Web应用程序中,我将显示如下: 瓶子.doc sheet.xls 演示文稿.ppt stackof.jpg 钮扣 我将保留复选框供每个人选择。假设一个用户选择了这四个文件并单击了按钮,我将其保留在下面。然后,我为每种类型的文件实例化clasees以转换为pdf,我已经编写了pdf,并将它们转换为pdf并返回。我的问题是clases能够读取数据表单URL并将其转换为pdf。但我不知道如何返回流并合并它们 string url = @"url"

这个问题主要涉及.net中web应用程序中的流。在我的Web应用程序中,我将显示如下:

  • 瓶子.doc
  • sheet.xls
  • 演示文稿.ppt
  • stackof.jpg

    钮扣

  • 我将保留复选框供每个人选择。假设一个用户选择了这四个文件并单击了按钮,我将其保留在下面。然后,我为每种类型的文件实例化clasees以转换为pdf,我已经编写了pdf,并将它们转换为pdf并返回。我的问题是clases能够读取数据表单URL并将其转换为pdf。但我不知道如何返回流并合并它们

    string url = @"url";
    
    //Prepare the web page we will be asking for
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.ContentType = "application/mspowerpoint";
    request.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0";
    
    //Execute the request
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    //We will read data via the response stream
    Stream resStream = response.GetResponseStream();
    
    //Write content into the MemoryStream
    BinaryReader resReader = new BinaryReader(resStream);
    
    MemoryStream PresentaionStream = new MemoryStream(resReader.ReadBytes((int)response.ContentLength));
    //convert the presention stream into pdf and save it to local disk.
    

    但我想再次返回流。我如何才能做到这一点欢迎任何想法。

    如果我正确理解了您的问题,您可以立即将其与响应一起发送,这样用户将收到下载请求

    System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("Content-Type", "binary/octet-stream");
    response.AddHeader("Content-Disposition", "attachment; filename=nameofthefile.pdf; size=" + downloadBytes.Length.ToString());
    response.Flush();
    response.BinaryWrite(downloadBytes);
    response.Flush();
    response.End();
    

    其中downloadBytes是一个
    字节[]
    ,包含pdf。

    我假设这是一个asp.net页面,您正在从服务获取pdf。在将其返回给用户之前,不需要将其保存在本地。您可以将数据块写入outputstream

    //Execute the request
    HttpWebResponse response = null;
    try
    {
        response = (HttpWebResponse)request.GetResponse();
    }
    catch (WebException we) { // handle web excetpions }
    catch (Exception e) { // handle other exceptions }
    
    this.Response.ContentType = "application/pdf";
    
    const int BUFFER_SIZE = 1024;
    byte[] buffer = new byte[BUFFER_SIZE];
    int bytes = 0;
    while ((bytes = resStream.Read(buffer, 0, BUFFER_SIZE)) > 0)
    {
        //Write the stream directly to the client 
        this.Response.OutputStream.Write(buff, 0, bytes);
    }
    

    但在这里,我用一个请求转换多个文件。因此,我如何区分不同的流。我们无法向用户发送多个响应,因此可以选择将它们压缩或让pdf服务将所有文件合并到一个大pdf中。因此,如果您需要压缩它们,您需要创建一个zip文件并将流写入zip。请看,我不想下载,我想在web环境中直接将文件发送到客户端的打印机,这是不可能的。你怎么知道用户是否有打印机?根据我的回答,用户将收到pdf的下载请求,如果他在下载后打开文件,他可以从他的pdf查看器中打印。没有“我的应用程序要求”是指在没有任何中间步骤的情况下,应该直接使用打印对话框提示用户。这是我的要求,我正在执行打印应用程序。您似乎有两个问题。1.如何将多个流合并为一个流并将其转换为pdf。2.如何将pdf流返回到客户端。我会把数字2保留在这里,并为数字1提出一个新问题,因为这是一个完全不同的主题。