2016-05-26 6 views
0

Я пытаюсь сохранить PDF с помощью открытого диалога файла и iTextSharp с функцией:Сохранение PDF-файл неудачу, потому что он используется другим процессом

Private Sub saveFileDialog(saveType As String) 
    ' Displays a SaveFileDialog 
    Dim saveFileDialog1 As New SaveFileDialog() 
    Select Case saveType 
     Case "PDF" 
      saveFileDialog1.Filter = "PDF File|*.pdf" 
      saveFileDialog1.Title = "Save a PDF File" 
     Case "Image" 
      saveFileDialog1.Filter = "PNG Image|*.png" 
      saveFileDialog1.Title = "Save an Image File" 
    End Select 
    saveFileDialog1.ShowDialog() 
    ' If the file name is not an empty string open it for saving. 
    If saveFileDialog1.FileName <> "" Then 
     ' Saves the Image via a FileStream created by the OpenFile method. 
     Dim fs As System.IO.FileStream = CType(saveFileDialog1.OpenFile(), System.IO.FileStream) 
     Select Case saveType 
      Case "PDF" 
       Dim doc As iTextSharp.text.Document = New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, Bounds.Left, Bounds.Right, Bounds.Top, Bounds.Bottom) 
       Dim wri As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, New FileStream(saveFileDialog1.FileName, FileMode.Create)) 
       doc.Open() 
       Dim Image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(bmp, System.Drawing.Imaging.ImageFormat.Png) 
       doc.Add(Image) 
       doc.Close() 
      Case "Image" 
       bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Png) 
     End Select 
     fs.Close() 
    End If 
End Sub 

Все, кажется, работает правильно, пока я нажмите кнопку Сохранить в файл сохранить диалог, где я получаю ошибку:

"The process cannot access the file 'C:\Users\Daisy\Desktop\f.pdf' because it is being used by another process." 

файл затем делает сохранить на месте, но это не открываемое и составляет 0 байт.

Что я делаю неправильно и как его исправить?

+0

Скорее всего, какой-то поток остается где-то открытым. попробуйте убедиться, что вы правильно распоряжаетесь потоками, когда закончите с ними. – Nkosi

+1

Да, это все. Вы открываете два файла в одном файле. Когда вы откроете файл с диалоговым окном и снова, когда вы создадите экземпляр автора PDF. – Nkosi

ответ

3

Вы открываете два файла в одном файле. Когда вы откроете файл с диалоговым окном и снова, когда вы создадите экземпляр автора PDF.

Private Sub saveFileDialog(saveType As String) 
    ' Displays a SaveFileDialog 
    Dim saveFileDialog1 As New SaveFileDialog() 
    Select Case saveType 
     Case "PDF" 
      saveFileDialog1.Filter = "PDF File|*.pdf" 
      saveFileDialog1.Title = "Save a PDF File" 
     Case "Image" 
      saveFileDialog1.Filter = "PNG Image|*.png" 
      saveFileDialog1.Title = "Save an Image File" 
    End Select 
    saveFileDialog1.ShowDialog() 
    ' If the file name is not an empty string open it for saving. 
    If saveFileDialog1.FileName <> "" Then 
     ' Saves the Image via a FileStream created by the OpenFile method. 
     Dim fileStream As System.IO.Stream = saveFileDialog1.OpenFile() 
     Select Case saveType 
      Case "PDF" 
       Dim doc As iTextSharp.text.Document = New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, Bounds.Left, Bounds.Right, Bounds.Top, Bounds.Bottom) 
       Dim wri As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, fileStream) 
       doc.Open() 
       Dim Image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(bmp, System.Drawing.Imaging.ImageFormat.Png) 
       doc.Add(Image) 
       doc.Close() 
      Case "Image" 
       bmp.Save(fileStream, System.Drawing.Imaging.ImageFormat.Png) 
     End Select 
     fileStream.Close() 
    End If 
End Sub