2015-10-20 66 views
0

我正在使用ITextSharp创建PDF的C#库。我在MSSQL Server表中包含一个列,其中包含上传的PDF文件名,并将其合并到一个文档中。DataReader列表C#/ SQL Server Azure ASP.NET WebForms

 public void btnMerge_Click(object sender, EventArgs e) 
{ 
    SqlDataReader rdr = null; 
    string checkID = "1210"; 
    SqlConnection con2 = new SqlConnection(sqlConnection); 
    con2.Open(); 
    string sqlUserName2; 
    sqlUserName2 = "SELECT AttachmentName FROM [Attachment] WHERE RequestId ='" + checkID + "' "; 
    SqlCommand cmd2 = new SqlCommand(sqlUserName2, con2); 
    rdr = cmd2.ExecuteReader(); 
    DataTable dt = new DataTable(); 
    dt.Load(rdr); 
    List<PdfReader> readerList = new List<PdfReader>(); 
    foreach (DataRow row in dt.Rows) 
    { 
     PdfReader pdfReader = new PdfReader("http://azurewebsites.net/uploads/reports/" + 
      Convert.ToString(row[0])); 
     readerList.Add(pdfReader); 
    } 
    Document document = new Document(PageSize.A4, 0, 0, 0, 0); 
    //Get instance response output stream to write output file. 
    PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream); 
    string path = Environment.GetEnvironmentVariable("HOME").ToString() + "\\site\\wwwroot\\uploads\\reports\\"; 
    PdfWriter.GetInstance(document, new FileStream(path + Request.QueryString["id"] + "-" + Session["streetAddress"] + ".pdf", FileMode.Create)); 
    document.Open(); 
    foreach (PdfReader reader in readerList) 
    { 
     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      document.Add(iTextSharp.text.Image.GetInstance(page)); 
     } 
    } 
    document.Close(); 

    Response.AppendHeader("content-disposition", "inline; filename=" + Request.QueryString["id"] + "-Final"); 
    Response.ContentType = "application/pdf"; 
} 
private void MergePDFs(string outPutFilePath, params string[] filesPath) 
{ 
    List<PdfReader> readerList = new List<PdfReader>(); 
    foreach (string filePath in filesPath) 
    { 
     PdfReader pdfReader = new PdfReader(filePath); 
     readerList.Add(pdfReader); 
    } 

    //Define a new output document and its size, type 
    Document document = new Document(PageSize.A4, 0, 0, 0, 0); 
    //Create blank output pdf file and get the stream to write on it. 
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outPutFilePath, FileMode.Create)); 
    document.Open(); 

    foreach (PdfReader reader in readerList) 
    { 
     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      document.Add(iTextSharp.text.Image.GetInstance(page)); 
     } 
    } 
    document.Close(); 
} 

我设法使用DataReader和DataTable暂时RESPONSE.WRITE在返回的结果中的每个行/列的值。现在我需要为ItextSharp构建“readerList”来将文件合并到一个PDF中。这是我坚持的地方我如何用DataReader/DataTable结果替换我的代码中的硬编码列表“pdfReader1 & pdfReader2”?

提前致谢!

+0

我编辑了上面的代码,为那些可能需要类似代码的最终工作代码编写代码。 –

回答

1
List<PdfReader> readerList = new List<PdfReader>(); 
foreach (DataRow row in dt.Rows) 
{ 
    PdfReader pdfReader = new PdfReader("http://azurewebsites.net/uploads/reports/" + 
    Convert.ToString(row[0])); 
    readerList.Add(pdfReader); 
} 
+0

这看起来很完美@我现在正在测试它。 –

+0

你是男人@Igor!它的作品非常漂亮! –