feat(docs): oo docs comment — Word-комментарии в .docx (обход отсутствия comments REST) #88

Closed
opened 2026-10-07 18:31:47 +01:00 by eSlider · 0 comments
Owner

Проблема

На портале office.produktor.io (ONLYOFFICE Workspace) нет REST-маршрута комментариев к файлу:

  • GET /api/2.0/files/file/{id}/comment → 404
  • POST /api/2.0/files/file/{id}/comment → 500

Проверено на .docx и .txt, на живом и на scratch-файле. При этом сам API файлов работает (/api/2.0/files/file/{id}.json отвечает 200), то есть дело в отсутствии маршрута, а не в правах.

При этом ONLYOFFICE Docs умеет показывать обычные Word-комментарии из DOCX.

Решение

Вшивать настоящие Word-комментарии прямо в .docx и заливать файл обратно.

  • Библиотека: docx_comment.go — InjectDocxComments(src, author, comments): добавляет word/comments.xml, w:commentRangeStart/End, w:commentReference, правит [Content_Types].xml и word/_rels/document.xml.rels.
  • CLI: oo docs comment FILE_ID --spec comments.json [--out path] [--replace]
    • --spec — JSON [{"anchor": "<текст абзаца>", "text": "<комментарий>"}].
    • Якорь ищется по склеенному тексту абзаца (сущности раскодированы), переживает разбиение текста по run'ам; на абзац не больше одного комментария.
    • Автор по умолчанию — текущий пользователь портала (--author переопределяет).
    • --replace использует UpdateFile, то есть содержимое заменяется на месте, id файла и ссылки сохраняются.

Тесты

docx_comment_test.go: синтетический docx, проверка маркеров, comments.xml, автора, content types, rels, отсутствия вставки внутри w:pPr, отсутствия совпадений и парсинга спеки. go test ./... зелёный, gofmt/go vet чистые.

Проверено вживую

Комментарии вшиты в договор аренды (fileid 4379) на office.produktor.io: 12 комментариев, автор Andriy Oblivantsev, id файла сохранён, редактор показывает их в правом поле.

## Проблема На портале `office.produktor.io` (ONLYOFFICE Workspace) нет REST-маршрута комментариев к файлу: - `GET /api/2.0/files/file/{id}/comment` → 404 - `POST /api/2.0/files/file/{id}/comment` → 500 Проверено на `.docx` и `.txt`, на живом и на scratch-файле. При этом сам API файлов работает (`/api/2.0/files/file/{id}.json` отвечает 200), то есть дело в отсутствии маршрута, а не в правах. При этом ONLYOFFICE Docs умеет показывать обычные Word-комментарии из DOCX. ## Решение Вшивать настоящие Word-комментарии прямо в `.docx` и заливать файл обратно. - Библиотека: `docx_comment.go` — `InjectDocxComments(src, author, comments)`: добавляет `word/comments.xml`, `w:commentRangeStart/End`, `w:commentReference`, правит `[Content_Types].xml` и `word/_rels/document.xml.rels`. - CLI: `oo docs comment FILE_ID --spec comments.json [--out path] [--replace]` - `--spec` — JSON `[{"anchor": "<текст абзаца>", "text": "<комментарий>"}]`. - Якорь ищется по склеенному тексту абзаца (сущности раскодированы), переживает разбиение текста по run'ам; на абзац не больше одного комментария. - Автор по умолчанию — текущий пользователь портала (`--author` переопределяет). - `--replace` использует `UpdateFile`, то есть содержимое заменяется на месте, id файла и ссылки сохраняются. ## Тесты `docx_comment_test.go`: синтетический docx, проверка маркеров, `comments.xml`, автора, content types, rels, отсутствия вставки внутри `w:pPr`, отсутствия совпадений и парсинга спеки. `go test ./...` зелёный, `gofmt`/`go vet` чистые. ## Проверено вживую Комментарии вшиты в договор аренды (fileid 4379) на `office.produktor.io`: 12 комментариев, автор Andriy Oblivantsev, id файла сохранён, редактор показывает их в правом поле.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eSlider/go-onlyoffice#88