“无法将内容添加到PdfImportedPage中。”错误

时间:2014-02-24 14:44:35

标签: itextsharp

我正在尝试使用ITextSharp下载和合并多个pdf文件。

之前曾经工作但是我得到了“内容无法添加到PdfImportedPage”。行上的错误消息:

importedPage = writer.GetImportedPage(reader, currentPageIndex);

完整的代码如下,任何帮助将非常感激。

private string MergeDocuments(IList<string> fileUrls, string fileName)
{
  var reportFolder = this.ReportFolder + "\\";

  using (MemoryStream output = new MemoryStream())
  {
      Document document = new Document();

      try
      {
          // Initialize pdf writer
          PdfWriter writer = PdfWriter.GetInstance(document, output);

          // Open document to write
          document.Open();
          PdfContentByte content = writer.DirectContent;
          PdfImportedPage importedPage;

          // Iterate through all pdf documents
          foreach (var url in fileUrls)
          {
              // Create pdf reader
              using (PdfReader reader = new PdfReader(new Uri(url)))
              {
                  int numberOfPages = reader.NumberOfPages;

                  // Iterate through all pages
                  for (int currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++)
                  {
                      // Determine page size for the current page
                      document.SetPageSize( reader.GetPageSizeWithRotation(currentPageIndex) );

                      // Create page
                      document.NewPage();
                      importedPage = writer.GetImportedPage(reader, currentPageIndex);
                      content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0);

                  }
              }
          }
      }
      catch (Exception exception)
      {
          throw new Exception("Error occured", exception);
      }

      File.WriteAllBytes(reportFolder + fileName + ".pdf", output.GetBuffer());

  }

  return "Reports/" + fileName + ".pdf";
}

当我尝试以下代码时,我在addDocument()方法中得到一个空指针异常:

using (MemoryStream output = new MemoryStream()) {
    Document document = new Document();
    document.Open();
    PdfCopy copy = new PdfSmartCopy(document, output);
    foreach (var url in fileUrls) {
        using (WebClient client = new WebClient()) {
            var byteArray = client.DownloadData(url);
            PdfReader reader = new PdfReader(byteArray);
            copy.AddDocument(reader);
            reader.Close();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我发现问题,在将内存流写入文件之前应该关闭文档对象。

刚刚添加了document.Close(),如下所示。

 document.Close();
 File.WriteAllBytes(reportFolder + fileName + ".pdf", output.GetBuffer());