作成中のpdfファイルを保持しているプロセスを閉じる方法を見つけようとしています。作成後にストリームを破棄して閉じようとしましたが、「別のプロセスで使用されているため、プロセスはファイル '\server\PDFs\test.pdf' にアクセスできません」というメッセージが表示されます。基本的に、最初に test.pdf が作成されると、データを編集できるページが作成され、改訂された test.pdf が再作成されます。プロセスを閉じる方法はありますか?試行を続けるために while ステートメント ループを実行しようとしましたが、うまくいきませんか?
'Create the original pdf
Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, New FileStream(path & myUniqueFileName, FileMode.Create))
Doc1.Open()
Dim test As String
test = Session("PDF")
Dim PDFHeader As String
PDFHeader = Session("Header")
Dim imagepath As String = Server.MapPath(".") & "/images/Header.png"
Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath)
image.ScalePercent(70.0F)
Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.BLACK, Element.ALIGN_LEFT, 1)
Doc1.Add(image)
Doc1.Add(New Paragraph(PDFHeader))
Doc1.Add(New Chunk(line1))
Doc1.Add(New Paragraph(test))
pdfWrite.Flush()
Doc1.Close()
Doc1.Dispose()
pdfWrite.Dispose()
pdfWrite.Close()
データを編集した後、pdf を再作成します。
Dim _fileInUse As Boolean = True
Do While _fileInUse
_fileInUse = FileInUse(myUniqueFileName)
If Not _fileInUse Then
Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, New FileStream(path & myUniqueFileName, FileMode.Create))
Doc1.Open()
Dim test As String
test = Session("PDF")
Dim PDFHeader As String
PDFHeader = Session("Header")
Dim imagepath As String = Server.MapPath(".") & "/images/Header.png"
Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath)
image.ScalePercent(70.0F)
Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.BLACK, Element.ALIGN_LEFT, 1)
Doc1.Add(image)
Doc1.Add(New Paragraph(PDFHeader))
Doc1.Add(New Chunk(line1))
Doc1.Add(New Paragraph(test))
End If
Loop
Doc1.Close()
Doc1.Dispose()
Public Function FileInUse(ByVal sFile As String) As Boolean
Dim thisFileInUse As Boolean = False
Dim fs As FileStream
If File.Exists(sFile) Then
Try
fs = File.Open(sFile, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)
fs.Close()
fs.Dispose()
Catch
Try
fs.Close()
fs.Dispose()
Catch
End Try
thisFileInUse = True
End Try
End If
Return thisFileInUse
End Function