Acrobat SDK IAC Изменить свойство точек аннотации - PullRequest
0 голосов
/ 15 октября 2018

Ссылки:
Acrobat SDK, работа с аннотациями

Сведения о проекте:
Целевая структура: 4,5
Язык: Visual Basic
Версия Interop.Acrobat: 1.1.0.0

Характеристики хост-ПК:
Имя ОС: Microsoft Windows 10 Enterprise
Версия: 10.0.17134 Build17134

В настоящее время я пытаюсь изменить свойство points аннотации, загруженной в vb.net.Я могу изменить все другие свойства, кроме массива свойств точек.Когда я пытаюсь изменить массив свойств points, я получаю следующую ошибку: «Сервер выдал исключение. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))» или «Значение не попадает в ожидаемый диапазон.».

У меня есть аннотация "Линия".Документация подтверждает, что этот тип аннотации имеет массив точек (я могу прочитать его во время отладки в любом случае, так что он определенно есть, я просто не могу написать обратно).

Я попытался изменить существующую аннотацию Line и добавитьВ новой аннотации Line я обнаружил вышеупомянутые ошибки в обоих сценариях.

Я просмотрел примеры проектов в Acrobat SDK и не могу найти ни одного случая, когда бы изменялся массив свойств points.У меня есть ощущение, что у меня неправильный тип данных при обратной записи в массив точек, так как отладчик Visual Studio говорит, что мой тип данных массива точек отличается от того, который возвращен из объекта свойства аннотации.Мой тип данных - «Object ()», а тип данных свойства точек - «Object {Object ()}»

arr_oCustomPoints - это мои пользовательские точки, которые я хочу присвоить props.points:

data types not the same

Дочерние элементы массива имеют один и тот же тип данных в соответствии с отладчиком:

enter image description here
Редактировать - Это появляется в журнале событий Windows при ошибке rpc_e_serverfault

enter image description here
Я понимаю, что с точки зрения javascriptsчто свойство points на самом деле является агрегатом объектов, что заставляет меня поверить, что я неправильно его обрабатываю в vb.net.

Итак, мой вопрос прост: как мне вернуться к свойству points?Мне нужно, чтобы мое приложение могло изменять существующее свойство точек аннотаций.

    Dim oPDDocTarget As Acrobat.CAcroPDDoc

    Dim oJSOTarget As Object = Nothing

    Try
        oPDDocTarget = CreateObject("AcroExch.PDDoc")

        Dim sPathPDTarget As String = Me.txtTargetPDF.Text

        If Not IO.File.Exists(sPathPDTarget) Then
            MessageBox.Show("File [" & sPathPDTarget & "] does not exist.")

            Exit Sub
        End If

        If Not oPDDocTarget.Open(sPathPDTarget) Then
            MessageBox.Show("Failed to open PDF file [" & sPathPDTarget & "]")

            Exit Sub
        End If

        oJSOTarget = oPDDocTarget.GetJSObject

        oJSOTarget.syncAnnotScan()
        Dim arr_oAnnotsCopyFrom As Object() = oJSOTarget.GetAnnots(CInt(nudTargetPage.Value))
        Dim iAnnotsCopyCount = arr_oAnnotsCopyFrom.Length

        For i As Integer = 0 To iAnnotsCopyCount - 1
            If arr_oAnnotsCopyFrom(i).type = "Line" Then
                Dim props = arr_oAnnotsCopyFrom(i).getProps()

                Dim arr_oCustomXY1 As Object() = New Object(1) {CDbl(100.23), CDbl(143.23)}
                Dim arr_oCustomXY2 As Object() = New Object(1) {CDbl(245.2), CDbl(423.43)}

                Dim arr_oCustomPoints As Object() = New Object(1) {arr_oCustomXY1, arr_oCustomXY2}

                props = arr_oAnnotsCopyFrom(i).getProps()

                props.points = arr_oCustomPoints
            End If
        Next

        If Not oPDDocTarget.Save(Acrobat.PDSaveFlags.PDSaveFull, sPathPDTarget) Then
            MessageBox.Show("Failed to save PDF document [" & sPathPDTarget & "]")
        Else
            MessageBox.Show("Saved PDF document [" & sPathPDTarget & "]")
        End If

        If Not oPDDocTarget.Close() Then
            MessageBox.Show("Failed to close PDF document [" & sPathPDTarget & "]")
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        KillAcrobat()
    End Try
End Sub


РЕДАКТИРОВАТЬ

IВыяснили, как сделать массивы объектов точно такими же типами данных, но я все еще получаю ошибку rpc_e_serverfault.Продолжаем расследовать ошибку, возникшую в oleaut32.dll

...