.net - Merging Memory Streams to create a http PDF response in c# -


i trying merge 2 crystal reports single pdf file , i'm using itextsharp v5.1.1. says document cannot opened. might corrupted. there no build errors. pdf malformed , cant opened. here order chose accomplish this.

  1. export crystal report memorystream1 in pdf format
  2. export second report memorystream2.
  3. merge memory streams
  4. send streams http output response pdf.

here code each step in order.

   /// dataset stored procedure cssource report    dscs = csdata.getussourcexml(ds_input);    /// create report of type cssource    rptcs = reportfactory.getreport(typeof(cssource));    rptcs .setdatasource(dscs);    /// set parameters cs report    rptcs .parameterfields["parameterid"].currentvalues.clear();    rptcs .setparametervalue("parameterid", pid);    //// serialize object pdf                        mscs=(memorystream)rptcs .exporttostream(exportformattype.portabledocformat); 

for step 2

   /// dataset stored procedure aden report    dsad = csdata.getadden(ds_input);    /// create report of type aden    rptad = reportfactory.getreport(typeof(aden));    rptad.setdatasource(dsad );    /// set parameters aden report    rptad.parameterfields["parameterid"].currentvalues.clear();    rptad.setparametervalue("parameterid", pid);    //// serialize object pdf                        msad = (memorystream)rptad.exporttostream(exportformattype.portabledocformat); 

for step 3

  system.collections.generic.list<byte[]> sourcefiles = new list<byte[]>();   sourcefiles.add(mscs.toarray());   sourcefiles.add(msad.toarray());   pdfmerger mpdfs = new pdfmerger();   /// ms memory stream both streams added   ms=mpdfs.mergefiles(sourcefiles); 

mergefiles method follows

 public memorystream mergefiles(generic.list<byte[]> sourcefiles)     {         document document = new document();         memorystream output = new memorystream();          try         {             // initialize pdf writer             pdfwriter writer = pdfwriter.getinstance(document, output);             //writer.pageevent = new pdfpageevents();              // open document write             document.open();             pdfcontentbyte content = writer.directcontent;              // iterate through pdf documents             (int filecounter = 0; filecounter < sourcefiles.count;                     filecounter++)             {                 // create pdf reader                 pdfreader reader = new pdfreader(sourcefiles[filecounter]);                 int numberofpages = reader.numberofpages;                  // iterate through pages                 (int currentpageindex = 1; currentpageindex <=                                    numberofpages; currentpageindex++)                 {                     // determine page size current page                     document.setpagesize(                        reader.getpagesizewithrotation(currentpageindex));                      // create page                     document.newpage();                     pdfimportedpage importedpage =                       writer.getimportedpage(reader, currentpageindex);                       // determine page orientation                     int pageorientation =                        reader.getpagerotation(currentpageindex);                     if ((pageorientation == 90) || (pageorientation == 270))                     {                      content.addtemplate(importedpage, 0, -1f, 1f, 0, 0,                      reader.getpagesizewithrotation(currentpageindex).height);                     }                     else                     {                     content.addtemplate(importedpage, 1f, 0, 0, 1f, 0, 0);                     }                 }             }         }         catch (exception exception)         {         throw new exception("there has unexpected exception" +         " occured during pdf merging process.", exception);         }                 {            // document.close();         }         return output;     } 

step 4 serialize memory stream pdf

  // ms memory stream converted pdf   response.clear();         response.clearcontent();         response.clearheaders();         response.contenttype = "application/pdf";         response.charset = string.empty;         response.addheader("content-disposition",          "attachment; filename=" +          "application of " + fullname.trim() + ".pdf");         //write file directly http content output stream.         response.outputstream.write(ms.toarray(), 0,                 convert.toint32(ms.length));         response.outputstream.flush();         response.outputstream.close();         rptcs.close();         rptcs.dispose();         rptad.close();         rptad.dispose(); 

thanks developers helping me this. urgent because has go production in day or 2. please respond.

chandanan.

here's simple merge method copies pdf files 1 pdf. use method quite when merging pdfs. hope helps.

    public memorystream mergepdfforms(list<byte[]> files)     {         if (files.count > 1)         {             pdfreader pdffile;             document doc;             pdfwriter pcopy;             memorystream msoutput = new memorystream();              pdffile = new pdfreader(files[0]);              doc = new document();             pcopy = new pdfsmartcopy(doc, msoutput);              doc.open();              (int k = 0; k < files.count; k++)             {                 pdffile = new pdfreader(files[k]);                 (int = 1; < pdffile.numberofpages + 1; i++)                 {                     ((pdfsmartcopy)pcopy).addpage(pcopy.getimportedpage(pdffile, i));                 }                 pcopy.freereader(pdffile);             }              pdffile.close();             pcopy.close();             doc.close();              return msoutput;         }         else if (files.count == 1)         {             return new memorystream(files[0]);         }          return null;     } 

step 4 try:

        rptcs.close();         rptcs.dispose();         rptad.close();         rptad.dispose();          response.clear();         response.contenttype = "application/pdf";         response.addheader("content-disposition",      "attachment; filename=" +      "application of " + fullname.trim() + ".pdf");         response.binarywrite(ms.toarray());         applicationinstance.completerequest(); 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -