Используйте IText Writer, чтобы проверить, открыт ли PDF - PullRequest
0 голосов
/ 17 января 2019

Я ищу способ проверить, открыт ли файл PDF, сохраненный в общей сети, другим процессом пользователем X.

Мои поиски были неудовлетворительными, и сейчас я пытаюсь использовать iText7 PDFwriter, чтобы проверить, используется ли PDF. И это работает, но когда PDF НЕ используется, моя теория не работает.

Если PDF-файл не используется, при закрытии программа записи повреждает мой PDF-файл.

Мой код:

Public Function IsOpen(ByVal oPath As String) As Boolean
    Try
        Dim oWriter As New PdfWriter(oPath)
        oWriter.Close()
        Return False
    Catch ex As Exception
        Return True
    End Try
End Function

Итак, мой вопрос. Могу ли я закрыть PDFwriter, ничего не делая с PDF. Отменить запись?

1 Ответ

0 голосов
/ 22 января 2019

Можно записать одно и то же содержимое в файл, а не отменить запись.

Сначала давайте запишем pdf в память:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourcePath), new PdfWriter(baos));
    pdfDocument.close();

Тогда давайте перепишем файл с байтами, хранящимися в памяти:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(new RandomAccessSourceFactory().createSource(baos.toByteArray()), new ReaderProperties()),
            new PdfWriter(sourcePath), new StampingProperties().useAppendMode());
    pdfDoc.close();

Побочный эффект: во время переписывания PDF может быть немного оптимизирован iText.

...