2016-12-24 12 views
0

У меня есть следующий код для объединения разных документов и создания файла pdf. Создает файлы правильно, но не показывает содержимое документа в созданном файле. Похоже, что он создает номера страниц, но я не вижу, чтобы содержимое документов было просто пустым. Что упущено здесьC# merge pdf using Spire does not write content

private void buttonAdd_Click(object sender, EventArgs e) 
     { 
      OpenFileDialog ofd = new OpenFileDialog(); 

      ofd.Filter = "All files (*.docx, *.pdf, *.pptx, *.pdf)| *.docx; *.pdf; *.pptx; *.xlsx"; 

      ofd.Multiselect = true; 

      if (DialogResult.OK == ofd.ShowDialog()) 

      { 

       string[] files = ofd.FileNames; 

       listBoxFiles.Items.AddRange(files); 

      } 
     } 

Вот документ код Merge

private void buttonMerge_Click(object sender, EventArgs e) 
     { 
      //Convert other file formats to PDF file 
      string ext = string.Empty; 
      foreach (object item in listBoxFiles.Items) 
      { 
       ext = Path.GetExtension(item.ToString()); 
       switch (ext) 
       { 
        case ".docx": 
         using (MemoryStream ms = new MemoryStream()) 
         { 
          Document doc = new Document(item.ToString()); 
          doc.SaveToStream(ms, Spire.Doc.FileFormat.PDF); 
          PdfFiles.Add(new PdfDocument(ms)); 
         } 
         break; 
        case ".pdf": 
         PdfFiles.Add(new PdfDocument(item.ToString())); 
         break; 
        case ".pptx": 
         using (MemoryStream ms = new MemoryStream()) 
         { 
          Presentation ppt = new Presentation(item.ToString(), Spire.Presentation.FileFormat.Auto); 
          ppt.SaveToFile(ms, Spire.Presentation.FileFormat.PDF); 
          PdfFiles.Add(new PdfDocument(ms)); 
         } 
         break; 
        case ".xlsx": 
         using (MemoryStream ms = new MemoryStream()) 
         { 
          Workbook xls = new Workbook(); 
          xls.LoadFromFile(item.ToString()); 
          xls.SaveToStream(ms, Spire.Xls.FileFormat.PDF); 
          PdfFiles.Add(new PdfDocument(ms)); 
         } 
         break; 
        default: 
         break; 
       } 
      } 
      //Merge the PDF files into one PDF 
      PdfDocument newPdf1 = new PdfDocument(); 
      foreach (PdfDocument doc in PdfFiles) 
      { 
       newPdf1.AppendPage(doc); 
      } 
      //Create a new PDF with specified page size, copy the content of merged file to new PDF file 
      PdfDocument newPdf2 = new PdfDocument(); 
      foreach (PdfPageBase page in newPdf1.Pages) 
      { 
       PdfPageBase newPage = newPdf2.Pages.Add(PdfPageSize.A4, new PdfMargins(0)); 
       PdfTextLayout loLayout = new PdfTextLayout(); 
       loLayout.Layout = PdfLayoutType.OnePage; 
       page.CreateTemplate().Draw(newPage, new PointF(0, 0), loLayout); 
      } 
      //Save the destination PDF file 
      SaveFileDialog sfd = new SaveFileDialog(); 
      sfd.Filter = "Pdf files(*.pdf)|*.pdf"; 
      if (DialogResult.OK == sfd.ShowDialog()) 
      { 
       newPdf2.SaveToFile(sfd.FileName); 
      } 
     } 

ответ

0

Вы должны использовать новый метод слияния вместо старого. Проверить ниже код:

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.IO; 
using System.Windows.Forms; 
using Spire.Doc; 
using Spire.Pdf; 
using Spire.Pdf.Graphics; 
using Spire.Presentation; 
using Spire.Xls; 

namespace Merge_Office_Files_to_PDF 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 

     ofd.Filter = "All files (*.docx, *.pdf, *.pptx, *.pdf)| *.docx; *.pdf; *.pptx; *.xlsx"; 

     ofd.Multiselect = true; 

     if (DialogResult.OK == ofd.ShowDialog()) 
     { 

      string[] files = ofd.FileNames; 

      listBox1.Items.AddRange(files); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

     string ext = string.Empty; 
     List<Stream> filesStreams = new List<Stream>(); 
     MemoryStream ms1 = new MemoryStream(); 
     MemoryStream ms2 = new MemoryStream(); 
     MemoryStream ms3 = new MemoryStream(); 
     foreach (object item in listBox1.Items) 
     { 
      ext = Path.GetExtension(item.ToString()); 
      switch (ext) 
      { 
       case ".docx": 
        Document doc = new Document(item.ToString()); 
        doc.SaveToStream(ms1, Spire.Doc.FileFormat.PDF); 
        filesStreams.Add(ms1); 

        break; 
       case ".pdf": 
        filesStreams.Add(File.OpenRead(item.ToString())); 
        break; 
       case ".pptx": 
        Presentation ppt = new Presentation(item.ToString(), Spire.Presentation.FileFormat.Auto); 
        ppt.SaveToFile(ms2, Spire.Presentation.FileFormat.PDF); 
        filesStreams.Add(ms2); 

        break; 
       case ".xlsx": 
        Workbook xls = new Workbook(); 
        xls.LoadFromFile(item.ToString()); 
        xls.SaveToStream(ms3, Spire.Xls.FileFormat.PDF); 
        filesStreams.Add(ms3); 

        break; 
       default: 
        break; 

      } 
     } 
     string outputFile = "result.pdf"; 
     PdfDocumentBase result = PdfDocument.MergeFiles(filesStreams.ToArray()); 
     result.Save(outputFile, Spire.Pdf.FileFormat.PDF); 
     ms1.Close(); 
     ms2.Close(); 
     ms3.Close();    
    } 
} 
+0

Я получаю ошибку 'result.Save (файл_вывода, Spire.Pdf.FileFormat.PDF);' вот ошибка я получаю 'CS0012 C# Тип«HttpContext»определяется в сборке на которые не ссылаются. Вы должны добавить ссылку на сборку 'System.Web, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.' – afri

+0

Добавьте ссылку на библиотеку System.Web, щелкнув правой кнопкой мыши проект в окне обозревателя решений, а затем нажмите Добавить ссылку в контекстном меню. В приведенном выше действии откроется диалоговое окно Add Reference и из вкладки .Net, вам нужно выбрать библиотеку System.Web и нажать OK. Если мой ответ поможет, отметьте его как ответ. Спасибо. –