Начать рукописный ввод в Word - PullRequest
0 голосов
/ 07 мая 2020

Я разработал надстройку VSTO для Word несколько лет go. Он использует чернильный инструмент, поэтому пользователь может написать подпись прямо на документе. Я закодировал его на Visual Basi c, потому что в то время я не знал этого лучше. Сегодня взял бы C#. Я не профессионал.

Как это работает

  1. Когда пользователь открывает документ, надстройка ищет определенное ключевое слово. Он содержит около 30 символов и скрыт в документе.
  2. Если ключевое слово найдено, оно прокручивается до поля подписи и запускает инструмент рисования, чтобы пользователь мог поставить подпись ручкой (предпочтительно) или finger.
  3. Когда документ закрыт, он будет автоматически загружен на сервер, где он хранится в формате pdf.

Итак: Открыть - Подписать - Закрыть. Никакого другого взаимодействия не требуется.

Слабое место - , для этого я использую CommandBars.ExecuteMso. Время от времени Microsoft что-то меняет на вкладке ленты.

Я использовал это в последние годы

Для Word 2010 и 2016

Application.ActiveDocument.CommandBars.ExecuteMso("InkingStart")

Для Word 365 - сборка 1803

Application.ActiveDocument.CommandBars.ExecuteMso("DrawInkMode")

Для Word 365 - сборка 1806

Application.ActiveDocument.CommandBars.ExecuteMso("FingerPaintingMode")

К сожалению, он больше не работает, начиная со сборки 12527.20194 (https://support.office.com/en-us/article/what-s-new-in-microsoft-365-95c8d81d-08ba-42c1-914f-bca4603e1426?ui=en-US&rs=en-US&ad=US)

В этой сборке они добавили инструмент лассо. Когда я выполняю CommandBars.ExecuteMso ("FingerPaintingMode"), активен инструмент лассо, а не ручка.

InkToolbox_lasso

Вы можете выполнить этот код как VBA в Word чтобы понять, что я имею в виду.

Sub InkTest()
    Application.ActiveDocument.CommandBars.ExecuteMso ("FingerPaintingMode")
End Sub

Странно то, что когда вы физически нажимаете на FingerPaintingMode, активно перо, а не лассо.

InkToolbox_pen

Я думаю о двух возможных решениях

  1. Используйте чернильный объект напрямую, а не go поверх ленты. Я предпочитаю вариант, но я не могу найти для этого способ. https://docs.microsoft.com/en-us/office/vba/api/overview/word/object-model
  2. Выберите перо в InkToolbox на вкладке TabDrawInk. Но это тип управления. Поэтому я не могу использовать ExecuteMso. Как я мог это сделать?
...