2016-07-21 16 views
0

私は、ファイル名接頭辞に基づいてpdfをマージするいくつかのコードをまとめています。私は現在、ファイル名を取得し、マージしないで上書きする以下のコードを持っています。私は自分の問題がFileStreamプレースメントだと考えていますが、現在の場所から移動するとファイル名を取得できません。助言がありますか?ありがとう。あなたが記述しているiText FileStream overwirtes

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

       } 
      } 
     } 
    } 
} 

}

答えて

1

行動はあなたのコードと一致しています。ループを間違った方法で作成しています。

はこれを試してみてください:

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

より理にかなっていること、ないないそれは?

あなたは自分のプレフィックスに基づいてグループのファイルにしたい場合は、質問この質問への答えでGroup files in a directory based on their prefix

への回答を読んでください、プレフィックスとファイル名の残りの部分が区切られているものとしますa -文字です。例えば、1-abc.pdfおよび1-xyz.pdfは、接頭語が1であり、一方2-abc.pdfおよび2-xyz.pdfは接頭辞が2です。あなたの場合は、どのように接頭辞を決めるのかははっきりしませんが、すべてのファイルのリストを取得して並べ替え、接頭辞を決定するアルゴリズムに基づいてファイルのグループを作るのは簡単です。

+0

返信いただきありがとうございます。私は1つのファイルにすべてをマージすることができました、私の問題は、ファイルのプレフィックスに基づいて複数のファイルを作成しています。私が123.pdf、122.pdf、および222.pdfを持っていて、私の出力フォルダに2つのpdfsで終わりたいのです。 forループに入る前にファイル名(接頭辞)が必要なので、私はそれをマージできます。それは理にかなっていますか? – okmred

+0

123.pdf、122.pdf、および222.pdfという名前のファイルの接頭辞が何であるかが明確でないため、あなたの*固有の*要求は意味をなさない。プレフィックスに基づいてファイルをフィルタリングし、そのプレフィックスに基づいてファイルをマージする*一般的な要求は理にかなっていますが、これはiTextの質問としてタグ付けするべきではありません。プログラミング言語。私はJavaでこれを行う方法を説明することができました。 C#でそれを行う方法を尋ねたいのであれば、C#質問を作成する必要があります(しかし、そのような質問は投票を受け付けないことに注意してください)。 –

+0

私は答えを更新しました。 –