Как визуализировать документ 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 или любой другой библиотеки, которая лучше всего подходит для вас.


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


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,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.