0

作成中の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
4

2 に答える 2

0

一意の名前で別のファイルを作成して更新することはできませんか。試したことはありませんが、ファイルに書き込めるかどうかを確認するためにループでファイルを開こうとするのは好きではありません。それ自体が問題を引き起こしているのかもしれません

このようなもの?:

'Create the original pdf
Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, New FileStream(path &          myUniqueFileName, FileMode.Create))
Dim rdm As New Random()
Dim newName As String
newName =  myUniqueFileName + rdm.Next(0, 100000).ToString("00000")

Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, New FileStream(path & newName , 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))

Doc1.Close()
Doc1.Dispose()
于 2013-10-08T19:36:34.120 に答える