Как визуализировать документ Word (.doc, .docx) в браузере с помощью JavaScript?

155

Я успешно выполнил код для отображения PDF-файла в браузере вместо диалогового окна «Открыть / Сохранить». Теперь я застрял, пытаясь отобразить документ Word в браузере. Я хочу отобразить документ Word в Firefox, IE7 +, Chrome и т. Д.

Кто-нибудь может помочь? Я всегда получаю диалоговое окно «Открыть / Сохранить» при отображении документа Word в браузере. Я хочу реализовать эту функциональность с помощью JavaScript.

Панкадж
источник
вы можете использовать syncfusion-document-editor в реакции для показа и редактирования файлов docx
Юсуф Мохаммад

Ответы:

236

В настоящее время в браузерах нет кода, необходимого для визуализации документов Word, и, насколько мне известно, в настоящее время нет клиентских библиотек для их визуализации.

Однако, если вам нужно только отобразить документ Word, но не нужно его редактировать, вы можете использовать средство просмотра документов Google через объект <iframe>для отображения удаленно размещенного файла .doc/ .docx.

<iframe src="https://docs.google.com/gview?url=http://remote.url.tld/path/to/document.doc&embedded=true"></iframe>

Решение адаптировано из « Как отобразить текстовый документ с помощью fancybox ».

Пример:

JSFiddle

Однако, если вы предпочитаете иметь встроенную поддержку, в большинстве, если не во всех браузерах, я бы рекомендовал повторно сохранить .doc/ .docxв виде файла PDF. Их также можно независимо отрисовывать с помощью PDF.js от Mozilla.

Редактировать:

Огромное спасибо fatbotdesigns за публикацию программы просмотра Microsoft Office 365 в комментариях.

<iframe src='https://view.officeapps.live.com/op/embed.aspx?src=http://remote.url.tld/path/to/document.doc' width='1366px' height='623px' frameborder='0'>This is an embedded <a target='_blank' href='http://office.com'>Microsoft Office</a> document, powered by <a target='_blank' href='http://office.com/webapps'>Office Online</a>.</iframe>

Еще одно важное предостережение, о котором следует помнить, как указано в Lightswitch05 , заключается в том, что это загрузит ваш документ на сторонний сервер. Если это неприемлемо, значит, такой способ отображения - неправильный образ действий.

Живые примеры:

Средство просмотра документов Google

Средство просмотра Microsoft Office

Брэндон Анзалди
источник
2
@Pankaj Вам не нужно загружать его на Google Диск. Вы можете просто изменить urlпараметр на полный URL-адрес файла .doc, размещенного на вашем сервере или в любом другом месте, с которым он может быть напрямую связан. Документы Google обрабатывают преобразование в формат, который может обрабатываться браузером на лету, и не требует его загрузки или сохранения в Документах Google, вместо этого выполняется запрос на стороне сервера для захвата файла.
Брэндон Анзалди
3
@Pankaj Даже если вы размещаете локальный сервер, Google не может получить доступ localhost. Ему нужен общедоступный URL. Вы можете использовать базовую службу пересылки, такую ​​как Finch .
Брэндон Анзалди
11
Вы также можете использовать программу просмотра офисных приложений в реальном времени: //view.officeapps.live.com/op/embed.aspx?src=your_url_here поместите этот URL в iframe
fatbotdesigns
1
@BonifacePereira Если вы настраиваете интрасеть, вам, вероятно, придется выполнить некоторое преобразование локально, поскольку GDocs и Live должны будут откуда-то извлекать документ. Если у вас есть возможность, вы могли бы настроить сервер для преобразования с помощью OpenOffice или чего-то еще: stackoverflow.com/questions/5538584/…
Брэндон Анзалди
20
Просто хочу отметить, что оба этих метода определенно загружают файлы на серверы Google и Microsoft. Если вы имеете дело с конфиденциальной информацией, доступ к которой должен быть ограничен, не делайте этого. Используйте альтернативное решение с PDF.js, чтобы создать PDF-версию файла для просмотра в браузере и предложить ссылку для загрузки различных версий excel / doc.
Lightswitch05,
31

Ответы Brandon и fatbotdesigns верны, но, реализовав предварительный просмотр документации Google, мы обнаружили несколько файлов .docx, которые не удалось обработать Google. Перешел на предварительную версию MS Office Online и работает как шарм.

Я бы рекомендовал использовать URL-адрес предварительного просмотра MS Office вместо Google.

https://view.officeapps.live.com/op/embed.aspx?src=http://remote.url.tld/path/to/document.doc' 
кернманн
источник
1
Есть ли какие-то ограничения на это использование? support.microsoft.com/en-us/help/2769380/…
Вишну,
чтобы обеспечить встречный рассказ - мы выбрали версию Google, потому что рендереру microsoft требуется намного больше времени для загрузки как в chrome, так и в ff
snerd
14

Кажется, есть некоторые js-библиотеки, которые могут обрабатывать .docx (не .doc) для преобразования HTML на стороне клиента (без определенного порядка):

Примечание. Если вы ищете лучший способ конвертировать файл doc / docx на стороне клиента, то, вероятно, ответ - не делайте этого . Если вам действительно нужно это сделать, сделайте это на стороне сервера, то есть с помощью libreoffice в режиме без заголовка , apache-poi (java) , pandoc или любой другой библиотеки, которая лучше всего подходит для вас.

ccpizza
источник
1
Замечу, что моя библиотека полностью не поддерживается. Он мог конвертировать файлы docx во что-то, что можно было отобразить в браузере. Я больше не знаю, правда ли это.
artburkart
3

ViewerJS полезен для просмотра / встраивания формата openoffice, такого как odt, odp, ods, а также pdf.

Для встраивания документа openoffice / pdf

<iframe src = "/ViewerJS/#../demo/ohm2013.odp" width='700' height='550' allowfullscreen webkitallowfullscreen></iframe>

/ViewerJS/ это путь ViewerJS

#../demo/ohm2013 путь к вашему файлу, который вы хотите встроить

Навин Д.А.
источник
Могу ли я использовать URL-адрес ссылки из aws s3
Вишну
Нет, вы предоставляете только локальную ссылку
Naveen DA
1
Спасибо за ответ
Вишну
К сожалению, в моем контексте более распространены форматы microsoft.
guettli
@guettli вы можете использовать pandoc для преобразования. где-то там есть версия pandoc wasm
Эрик Аронести
2

Думаю, у меня есть идея. Это тоже меня помешало, и мне все еще не удается отобразить его в Chrome.

Сохраните документ (name.docx) в Word как веб-страницу из одного файла (name.mht) В вашем html используйте

<iframe src= "name.mht" width="100%" height="800"> </iframe>

Измените высоту и ширину по своему усмотрению.

Кай Эссон
источник
6
@guidomocha Не просто комментируйте это, а объясните, почему это плохой подход.
J. Louw
при таком подходе текст документа будет отображаться без фоновой графики, верхнего колонтитула, нижнего колонтитула и других элементов. для длинных файлов с разными позициями элементов сохранение в виде веб-страницы разрушит дизайн.
newComer
1

Native Documents (в котором я заинтересован) создает программу просмотра (и редактор) специально для документов Word (как устаревших двоичных форматов .doc, так и современных форматов docx). Это происходит без преобразования в HTML с потерями. Вот как начать работу https://github.com/NativeDocuments/nd-WordFileEditor/blob/master/README.md

JasonPlutext
источник
2
Информация о ценах отсутствует. Является ли «Редактор / просмотрщик файлов Word» бесплатным?
FiringBlanks
Это коммерческое программное обеспечение, но у нас есть бесплатный план для стартапов / малого бизнеса, а для других - бесплатный план с ограничениями на использование. Подробности мы опубликуем в ближайшее время.
JasonPlutext
может ли это работать на одной странице без сервера, например, на aws s3?
Грэм Чиу
На стороне сервера мы упаковываем его как контейнеры Docker, которые вам нужно где-то запускать (например, ECS). (В принципе, мы могли бы запустить часть этого на Lambda, но вам все равно нужно постоянное хранилище документов, может быть, S3)
JasonPlutext
3
@JasonPlutext Выглядит интересно. Но я буду откровенен: я готов заплатить небольшую разумную плату за хороший пакет или услугу, но «представьте свою информацию, и мы сообщим вам, сколько это стоит» - НЕЛЬЗЯ .
manassehkatz-Moving 2 Codidact 01
1

PDFTron WebViewer поддерживает рендеринг Word (и других форматов Office) непосредственно в любом браузере и без каких-либо зависимостей на стороне сервера. Для проверки попробуйте https://www.pdftron.com/webviewer/demo

Ика
источник
0

Если вы хотите предварительно обработать файлы DOCX, а не дожидаться времени выполнения, вы можете сначала преобразовать их в HTML с помощью API преобразования файлов, такого как Zamzar . Вы можете использовать API для программного преобразования из DOCX в HMTL, сохранить вывод на свой сервер и затем передать этот HTML конечным пользователям.

Преобразование довольно просто:

curl https://api.zamzar.com/v1/jobs \
-u API_KEY: \
-X POST \
-F "source_file=@my.docx" \
-F "target_format=html5"

Это приведет к удалению любых зависимостей времени выполнения от служб Google и Microsoft (например, если они не работают или ваша скорость ограничена ими).

Он также имеет то преимущество, что вы можете распространить его на другие типы файлов, если хотите (PPTX, XLS, DOC и т. Д.).

Крис Уайли
источник
0

Вы также можете использовать некоторые существующие API, такие как GroupDocs.Viewer, которые могут преобразовать ваш документ в изображение или HTML, а затем вы сможете отобразить его в своем собственном приложении.

Довлет Маменов
источник
0

Используйте Libre Office API Вот пример

libreoffice --headless --convert-to html docx-file-path --outdir html-dir-path

Маюр Гаджбхийе
источник
Прочтите вопрос еще раз. Это не похоже на JavaScript.
fcdt,