2016-07-21 20 views
0

Ich bin dabei, einen Code zu erstellen, der PDFs basierend auf dem Dateinamenspräfix zusammenführen wird. Ich habe derzeit den folgenden Code, der den Dateinamen ergreift und nicht zusammenführt, sondern überschreibt. Ich glaube, mein Problem ist das FileStream-Placement, aber wenn ich es aus dem aktuellen Speicherort verschiebe, kann ich den Dateinamen nicht finden. Irgendwelche Vorschläge? Vielen Dank.iText FileStream überschreibt

static void CreateMergedPDFs() 
    { 
     string srcDir = "C:/PDFin/"; 
     string resultPDF = "C:/PDFout/"; 
     { 
      var files = System.IO.Directory.GetFiles(srcDir); 
      string prevFileName = null; 

      int i = 1; 
      foreach (string file in files) 
      { 
       string filename = Left(Path.GetFileName(file), 8); 
       using (FileStream stream = new FileStream(resultPDF + filename + ".pdf", FileMode.Create)) 
       { 

        if (prevFileName == null || filename == prevFileName) 
        { 
         Document pdfDoc = new Document(PageSize.A4); 
         PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
         pdfDoc.Open(); 
         { 
          pdf.AddDocument(new PdfReader(file)); 
          i++; 
         } 
         if (pdfDoc != null) 
          pdfDoc.Close(); 
         Console.WriteLine("Merges done!"); 
        } 

       } 
      } 
     } 
    } 
} 

}

Antwort

1

Das Verhalten, das Sie beschreiben, ist im Einklang mit Ihrem Code. Sie erstellen die Schleife auf eine falsche Weise.

Try this:

static void CreateMergedPDFs() 
    { 
     string srcDir = "C:/PDFin/"; 
     string resultPDF = "C:/PDFout/merged.pdf"; 
     FileStream stream = new FileStream(resultPDF, FileMode.Create); 
     Document pdfDoc = new Document(PageSize.A4); 
     PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
     pdfDoc.Open(); 
     var files = System.IO.Directory.GetFiles(srcDir); 
     foreach (string file in files) 
     { 
      pdf.AddDocument(new PdfReader(file)); 
     } 
     pdfDoc.Close(); 
     Console.WriteLine("Merges done!"); 
    } 
} 

, dass mehr Sinn macht, nicht wahr?

Wenn Sie gruppieren Dateien wollen auf der Grundlage ihrer Präfix, sollten Sie die Antwort auf die Frage lesen Group files in a directory based on their prefix

In der Antwort auf diese Frage wird davon ausgegangen, dass das Präfix und der Rest des Dateinamens getrennt sind durch ein - Zeichen. Zum Beispiel haben 1-abc.pdf und 1-xyz.pdf das Präfix 1, während 2-abc.pdf und 2-xyz.pdf das Präfix 2 haben. In Ihrem Fall ist nicht klar, wie Sie das Präfix bestimmen würden, aber es ist einfach, eine Liste aller Dateien zu erhalten, sie zu sortieren und Gruppen von Dateien basierend auf dem Algorithmus zu erstellen, den Sie für das Präfix festlegen möchten.

+0

Vielen Dank für die Antwort. Ich konnte alle in eine einzelne Datei zusammenführen, mein Problem besteht darin, mehrere Dateien basierend auf dem Dateipräfix zu erstellen. Also wenn ich 123.pdf, 122.pdf und 222.pdf habe und ich möchte 2 pdfs in meinem Ausgabeordner haben. Ich brauche den Dateinamen (Präfix), bevor ich in die for-Schleife komme, damit ich darauf fusionieren kann. Ist das sinnvoll? – okmred

+0

Ihre * spezifische * Anfrage macht keinen Sinn, weil nicht klar ist, welches Präfix die Dateien 123.pdf, 122.pdf und 222.pdf haben würden. Die * general * -Anforderung, Dateien basierend auf einem Präfix zu filtern und Dateien basierend auf diesem Präfix zusammenzuführen, ist sinnvoll, aber das ist eine Frage, die nicht als iText-Frage markiert werden sollte, da es in jedem Fall ein Kinderspiel ist Programmiersprache. Ich könnte erklären, wie man das in Java macht; Sie sollten eine C# -Frage erstellen, wenn Sie wissen möchten, wie Sie das in C# tun können (aber beachten Sie, dass eine solche Frage Down-Stimmen erhalten kann). –

+0

Ich habe die Antwort aktualisiert. –