2013-04-22 8 views
1

나는 pdf 템플릿을 가지고 있으며 데이터베이스의 모든 레코드를 생성하려고합니다. 찾았지만 phisical 파일에서만 작동합니다. 이 작업을 메모리에서만 수행하는 방법은 무엇입니까? 내가 MemoryStream을 사용하려고하지만 난 PdfReaderitextsharp multipage pdf 양식

이것을 읽을 수 없습니다
using iTextSharp.text.pdf; 
using System; 
using System.IO; 

public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string uniqueidstr = Guid.NewGuid().ToString(); 

     string file = Server.MapPath("~/Reports/PrimaVisita.pdf"); 

     string MasterPdfFile = Server.MapPath("./MstrCopyFile" + uniqueidstr + ".pdf").ToString(); 

     PdfCopyFields copy = new PdfCopyFields(new FileStream(MasterPdfFile, FileMode.CreateNew)); 

     for (int i = 0; i < 10; i++) 
     { 
      PdfReader tmpReader = new PdfReader(file); 
      string tmpfilepath = Server.MapPath("./tmpFile" + uniqueidstr + i.ToString() + ".pdf").ToString(); 

      FileStream tmpOutFileStream = new FileStream(tmpfilepath, FileMode.CreateNew); 
      PdfStamper tmpOutStamper = new PdfStamper(tmpReader, tmpOutFileStream); 
      AcroFields fields = tmpOutStamper.AcroFields; 
      fields.SetField("Cognome", "pippo" + i.ToString()); 
      fields.SetField("Nome", "pluto" + i.ToString()); 
      fields.SetField("DatiNascita", "paperino" + i.ToString()); 
      fields.SetField("Residenza", "topolino" + i.ToString()); 

      tmpOutStamper.Writer.CloseStream = false; 
      tmpOutStamper.FormFlattening = true; 
      tmpOutStamper.Close(); 
      tmpOutFileStream.Close(); 

      PdfReader nwPgReader = new PdfReader(tmpfilepath); 

      copy.AddDocument(nwPgReader); 
     } 

     copy.Close(); 
    } 
} 

오류는 "PDF 헤더 서명을 찾을 수 없습니다"입니다. 여기서 I 바이트 배열 MemoryStream을 변환함으로써 해결 코드

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string uniqueidstr = Guid.NewGuid().ToString(); 

     string file = Server.MapPath("~/Reports/PrimaVisita.pdf"); 

     MemoryStream masterStream = new MemoryStream(); 
     //string MasterPdfFile = Server.MapPath("./MstrCopyFile" + uniqueidstr + ".pdf").ToString(); 

     PdfCopyFields copy = new PdfCopyFields(masterStream); 

     for (int i = 0; i < 10; i++) 
     { 
      PdfReader tmpReader = new PdfReader(file); 
      string tmpfilepath = Server.MapPath("./tmpFile" + uniqueidstr + i.ToString() + ".pdf").ToString(); 
      MemoryStream tmpStream = new MemoryStream(); 

      //FileStream tmpOutFileStream = new FileStream(tmpfilepath, FileMode.CreateNew); 
      PdfStamper tmpOutStamper = new PdfStamper(tmpReader, tmpStream); 
      AcroFields fields = tmpOutStamper.AcroFields; 
      fields.SetField("Cognome", "pippo" + i.ToString()); 
      fields.SetField("Nome", "pluto" + i.ToString()); 
      fields.SetField("DatiNascita", "paperino" + i.ToString()); 
      fields.SetField("Residenza", "topolino" + i.ToString()); 

      tmpOutStamper.Writer.CloseStream = false; 
      tmpOutStamper.FormFlattening = true; 
      tmpOutStamper.Close(); 
      //tmpOutFileStream.Close(); 

      PdfReader nwPgReader = new PdfReader(tmpStream); 

      copy.AddDocument(nwPgReader); 
     } 

     copy.Close(); 
    } 
+0

당신은 * 내가 MemoryStream을 사용하려고 말을하지만 난 당신이 시도 할 때 무슨 일이 있었는지 PdfReader * --- 이것을 읽을 수 없습니다? – mkl

+0

답장을위한 탱크 거기에 대한 PDF 헤더에 대한 오류가있었습니다 – Bruno

+0

'MemoryStream' 읽는 잘못된 위치를 가진 것 같은데. 그 때 사용한 코드를 질문에 추가하십시오. – mkl

답변

1

하며 지금은 작동한다. 지원

브루노에 대한

탱크

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string uniqueidstr = Guid.NewGuid().ToString(); 

     string file = Server.MapPath("~/Reports/PrimaVisita.pdf"); 

     MemoryStream masterStream = new MemoryStream(); 

     PdfCopyFields copy = new PdfCopyFields(masterStream); 

     for (int i = 0; i < 10; i++) 
     { 
      PdfReader tmpReader = new PdfReader(file); 
      MemoryStream tmpStream = new MemoryStream(); 
      tmpStream.Position = 0; 

      PdfStamper tmpOutStamper = new PdfStamper(tmpReader, tmpStream); 
      AcroFields fields = tmpOutStamper.AcroFields; 
      fields.SetField("Cognome", "pippo" + i.ToString()); 
      fields.SetField("Nome", "pluto" + i.ToString()); 
      fields.SetField("DatiNascita", "paperino" + i.ToString()); 
      fields.SetField("Residenza", "topolino" + i.ToString()); 

      tmpOutStamper.Writer.CloseStream = false; 
      tmpOutStamper.FormFlattening = true; 
      tmpOutStamper.Close(); 
      byte[] buf = tmpStream.ToArray(); 

      PdfReader nwPgReader = new PdfReader(buf); 

      copy.AddDocument(nwPgReader); 
     } 

     copy.Close(); 


}