Ссылки:
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](https://i.stack.imgur.com/yikpM.png)
Дочерние элементы массива имеют один и тот же тип данных в соответствии с отладчиком:
Редактировать - Это появляется в журнале событий Windows при ошибке rpc_e_serverfault
Я понимаю, что с точки зрения 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