Я сделал скрипт для предварительного просмотра документов в формате PDF, включая отслеживаемые изменения, которые вы можете использовать в своих формах. Суть внизу

В Office Web Apps есть несколько полезных функций, две из которых — предварительный просмотр документа и немного скрытая функция "Печать в PDF".
Да, Office Web Apps автоматически создает PDF-копию документа. каждый документ, который вы храните в SharePoint. И это мгновенно!

Я хотел просмотреть свои документы в Editform и Viewform и начал с того, что просто вставил WOPIframe.aspx в iFrame. URL-адрес будет выглядеть примерно так:
[mytenant].sharepoint.com/_layouts/15/WopiFrame.aspx?sourcedoc={GUID}&action=interactivepreview

Это прекрасно работает, пока вы не захотите включить отслеживаемые изменения.

В SharePoint Online уже есть способ отобразить это — он называется «Режим специальных возможностей» (видите кнопку наверху?). Однако это устанавливает файл cookie, поэтому все ваши предварительные просмотры теперь находятся в режиме специальных возможностей, пока вы их не отключите, что немного раздражает и бесполезно в маленьком окне предварительного просмотра.
Кроме того, он не работает в помещении, для чего я его изначально и делал.

Получите этот токен доступа WOPI!

Фактический PDF-файл, который извлекается, когда вы нажимаете «Печать в PDF» или «Режим специальных возможностей», фактически находится на вашем сервере Office Web Apps.
Верно, Cross Origin. 😑Эх…

НО! С помощью передовой технологии, известной как iframe, нам не нужно беспокоиться ни о какой чепухе того же происхождения 🙌 Ура!

Чтобы получить этот PDF, вам нужны три вещи

  • Идентификатор элемента (указатель, а не идентификатор элемента списка)
  • Имя хоста OWA
  • Маркер доступа

Сначала получите DOM кадра wopi. Я использую fetch API, потому что он абстрагирует все, что мне не нравится в XmlHttpRequests.

fetch(
`${_spPageContextInfo.siteAbsoluteUrl}/_layouts/15/WopiFrame.aspx?sourcedoc=${encodeURIComponent(docUrl)}`, {credentials:"include"})

параметр docUrl — это URL-адрес текущего документа, в форме просмотра или редактирования которого вы находитесь. Вы можете найти его в объекте WPQ2FormCtx. WPQ2FormCtx.ItemAttributes.Url дает вам FileLeafRef без веб-адреса, например. «/Documents/MyDoc.docx», поэтому вам придется собрать собственный полный URL-адрес. (Я сделал это в коде, чтобы вам не пришлось)

В wopiframe dom есть элемент ‹form› с атрибутом действия, который содержит URL-адрес сервера owa и идентификатор элемента (guid). Мы подчеркнем их «изящно». В dom также есть ввод с метким названием access_token, который содержит токен, который нам понадобится для получения преобразованного PDF-файла с сервера owa.

Теперь, когда у вас есть имя хоста owa, токен доступа и идентификатор элемента, просто красиво свяжите их в FullPdfUrl.

let FullPdfUrl = 
await OWAServerHost()+
"/wv/WordViewer/" + FileName +
".pdf?WOPISrc="+
await WopiSrcSite()+
_spPageContextInfo.webServerRelativeUrl+
"/_vti_bin/wopi.ashx/files/"+
await WopiItemId()+
"&access_token="+
await WopiAccessToken()+
"&type=accesspdf"

Все, что осталось сделать, это поместить его в iframe рядом с формой и вуаля!

TL;DR — Код

Примечание. Это не будет работать в IE без fetch-polyfill. Кроме того, в IE нет понятия const, let или стрелочных функций, поэтому вам, вероятно, лучше перенести все это в ES5.