2016-12-24 2 views
0

Ich habe den folgenden Code, um verschiedene Dokumente zusammenführen und erstellt eine PDF-Datei. Erstellt die Dateien ordnungsgemäß, zeigt aber nicht den Inhalt des Dokuments auf der erstellten Datei. Es sieht so aus, als ob es die Seitenzahlen erzeugt, aber ich kann den Inhalt der Dokumente nicht sehen. WasC# merge pdf mit Spire nicht schreiben Inhalt

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); 

      } 
     } 

Hier hier verpasst wird, ist Dokument Merge Code

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); 
      } 
     } 

Antwort

0

Sie haben die neue Merge-Methode verwenden, sollte anstelle der alten. prüfen unten Code:

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

ich Fehler 'result.Save (output, Spire.Pdf.FileFormat.PDF);' hier der Fehler i 'CS0012 C# Der Typ 'Httpcontext' erhalten wird, in einer Baugruppe definiert Das ist nicht referenziert. Sie müssen einen Verweis auf Assembly 'System.Web, Version = 4.0.0.0, Culture = Neutral, PublicKeyToken = b03f5f7f11d50a3a' hinzufügen. – afri

+0

Fügen Sie den Verweis der System.Web-Bibliothek hinzu, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und dann auf Verweis hinzufügen klicken Option aus dem Kontextmenü. Die obige Aktion öffnet das Dialogfeld "Referenz hinzufügen" und auf der Registerkarte .Net müssen Sie System.Web library auswählen und auf OK klicken. Wenn meine Antwort hilft, bitte als Antwort markieren. Vielen Dank. –