2016-05-27 6 views
0

を使用してvb.netをマージした後、私は)私は今、私は古いファイル「pdfFilesを(削除する必要があり、私はここにはiTextSharp

Private Sub MergePdfFiles(ByVal pdfFiles() As String, ByVal outputPath As String) 
     Dim pdfCount As Integer = 0 
     Dim f As Integer = 0 
     Dim fileName As String 
     Dim reader As iTextSharp.text.pdf.PdfReader = Nothing 
     Dim pageCount As Integer = 0 
     Dim pdfDoc As iTextSharp.text.Document = Nothing 
     Dim writer As PdfWriter = Nothing 
     Dim cb As PdfContentByte = Nothing 

     Dim page As PdfImportedPage = Nothing 
     Dim rotation As Integer = 0 

     Try 
      pdfCount = pdfFiles.Length 
      If pdfCount > 1 Then 
       fileName = pdfFiles(f) 
       reader = New iTextSharp.text.pdf.PdfReader(fileName) 
       pageCount = reader.NumberOfPages 
       pdfDoc = New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18) 
       writer = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.OpenOrCreate)) 
       With pdfDoc 
        .Open() 
       End With 
       cb = writer.DirectContent 
       While f < pdfCount 
        Dim i As Integer = 0 
        While i < pageCount 
         i += 1 
         pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i)) 
         pdfDoc.NewPage() 
         page = writer.GetImportedPage(reader, i) 
         rotation = reader.GetPageRotation(i) 
         If rotation = 90 Then 
          cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height) 
         ElseIf rotation = 270 Then 
          cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30) 
         Else 
          cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0) 
         End If 
        End While 
        f += 1 
        If f < pdfCount Then 
         fileName = pdfFiles(f) 
         reader = New iTextSharp.text.pdf.PdfReader(fileName) 
         pageCount = reader.NumberOfPages 
        End If 
       End While 
       pdfDoc.Close() 
       reader.Close() 
      End If 
     Catch ex As Exception 
      'err 
     End Try 
    End Sub 

を発見した機能を使用しています一つに2つのPDFファイルをマージしていpdfファイルを削除します"しかし、私はエラーを取得しています"プロセスは、他のプロセスで使用されているため、 'C:....... pdf'というファイルにアクセスできません。これが最初のファイルのみで起こっている、私は他の1

OP Here with the function

おかげで私は、これはC#である知っている

+0

少なくとも「ライター」は近くに閉じ込められていない、または処分されていないことがわかり、そこから始めたいと思います。 –

+0

私はループの外側と内部で何らかの作業が行われているのはなぜか分かりません。これはIMHOではなく、それぞれのための本当に良い場所になります。 –

+0

私は作家を閉じてまだ運がない、私はそれを行うための別の方法を見つけるだろうと思って、私はこの機能、コピー、ペーストを見つけた後、テストして正常に働いた、私は良い方法があるはずですdo –

答えて

1

で何の問題もないが、これは私が一緒にファイルをマージするために使用するものです。

var document = new Document(); 
var outFile = Path.Combine(finishedFilePath, fileName + ".pdf"); 
var writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create)); 
try 
{ 
    document.Open(); 
    foreach (var fileName in filesList) 
    { 
     var reader = new PdfReader(Path.Combine(StartPath, fileName)); 

     for (var i = 1; i <= reader.NumberOfPages; i++) 
     { 
      var page = writer.GetImportedPage(reader, i); 
      writer.AddPage(page); 
     } 

     reader.Close(); 
    } 

    writer.Close(); 
    document.Close(); 
} 
catch (Exception ex) 
{ 
    //catch error    
} 
finally 
{ 
    writer.Close(); 
    document.Close(); 
} 

これは何らかの形で役立ちます。

+0

'PdfCopy'を使うことは、実際にはpdfsをマージするのに好ましい方法です。 – mkl

+0

@mkl - 私は 'PdfCopy'を使って調べる必要があります。 perferrdメソッドを教えてくれてありがとう。 :D – Eric