【问题标题】:DataReader list C#/SQL Server Azure ASP.NET WebFormsDataReader 列表 C#/SQL Server Azure ASP.NET WebForms
【发布时间】:2016-01-19 02:55:08
【问题描述】:

我正在使用 ITextSharp 一个用于创建 PDF 的 C# 库。我在 MSSQL Server 表中有一个列,其中包含要合并到一个文档中的上传的 PDF 文件名。

     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 来临时响应。在返回的结果中写入每行/列的值。现在我需要为 ItextSharp 构建“readerList”,用于将文件合并到一个 PDF 中。这就是我卡住的地方如何用 DataReader/DataTable 结果替换代码“pdfReader1 & pdfReader2”中的硬编码列表?

提前致谢!

【问题讨论】:

  • 我编辑了上面的代码,为可能需要类似的人提供了最终的工作代码。

标签: c# sql-server azure pdf


【解决方案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);
}

【讨论】:

  • 这看起来很完美@Igor 我现在正在测试它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
相关资源
最近更新 更多