有没有办法在 angular 8+ 中使用 ejs-documenteditorcontainer 在加载时默认打开 word(doc 或 docx)文件?
Is there a way to open the word (doc or docx) file by default on load using ejs-documenteditorcontainer in angular 8+?
我在这里尝试使用 [(ngModel)] 渲染一个 word 文件,但它没有按要求工作。还有其他办法吗?
我用过Angular10
提前致谢
HTML:
<div class="row">
<div class="col-12">
<ejs-documenteditorcontainer
serviceUrl="https://ej2services.syncfusion.com/production/web-services/api/documenteditor/"
style="display:block;height:660px" [enableToolbar]=true [(ngModel)]="editor"> </ejs-documenteditorcontainer>
</div>
</div>
TS:
import { Component, ViewEncapsulation } from '@angular/core';
import { ToolbarService } from '@syncfusion/ej2-angular-documenteditor';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
providers: [ToolbarService]
})
export class AppComponent {
editor: any = 'www.someWordFileFromOneDriveOrFromGoogleDrive.com'
}
终于找到窍门了。我不知道为什么 Syncfusion 没有在他们的文档中提到这个 api。但它有效! Stackblitz 演示是 here。您可以按照这个想法将您的word文件加载到ejs-documenteditorcontainer
。
添加到 HTML:
<input id="open_word" #open_word style="position:fixed; left:-100em" type="file" (change)="onFileChange($event)" accept=".dotx,.docx,.docm,.dot,.doc,.rtf,.txt,.xml,.sfdt"/>
<button ejs-button (click)="onFileOpenClick()">Import</button>
添加到 TS:
public onFileOpenClick() :void {
document.getElementById('open_word').click();
}
public onFileChange(e: any) :void {
if (e.target.files[0]) {
let file = e.target.files[0];
if (file.name.substr(file.name.lastIndexOf('.')) !== '.sfdt') {
this.loadFile(file);
}
}
}
public loadFile(file: File): void {
const serviceUrl = 'https://ej2services.syncfusion.com/production/web-services/api/documenteditor/';
let ajax: XMLHttpRequest = new XMLHttpRequest();
ajax.open('POST', serviceUrl + 'Import', true);
ajax.onreadystatechange = () => {
if (ajax.readyState === 4) {
if (ajax.status === 200 || ajax.status === 304) {
// open SFDT text in document editor
this.documentEditor.open(ajax.responseText);
}
}
}
let formData: FormData = new FormData();
formData.append('files', file);
ajax.send(formData);
}
旧答案:其实加载起来也不容易。您需要将 doc/docx 文件转换为 SFDT 格式并使用文档编辑器打开它,或者您可以使用 .NET Standard 库 Syncfusion.EJ2.WordEditor.AspNet.Core
进行此文件转换网络 API 服务实施。
您可以查看this documentation from Syncfusion了解详情。
文档编辑器不是表单元素。因此它不支持用于绑定数据的 ngModel 指令。它只接受 SFDT Json 字符串。因此,您需要将 word 文档转换为 SFDT,以便通过文档编辑器的打开 API 在编辑器中打开它。
https://ej2.syncfusion.com/documentation/api/document-editor#open
要在加载时打开文件,您可以使用文档编辑器的创建事件。
https://ej2.syncfusion.com/documentation/api/document-editor#created
示例 link 以在创建的事件中打开 SFDT 数据:https://stackblitz.com/edit/angular-7tvebw-3abz1v?file=app.component.html
要将 word 文档转换为 SFDT 以在编辑器中加载它,您需要 server-side 交互。
在server-side.
中,请参考以下文档将word文档转换为SFDT
您还可以查看以下文档platform-wise,了解文档编辑器所需的 Web 服务。
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/core/
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/mvc/
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/java/
我在这里尝试使用 [(ngModel)] 渲染一个 word 文件,但它没有按要求工作。还有其他办法吗?
我用过Angular10
提前致谢
HTML:
<div class="row">
<div class="col-12">
<ejs-documenteditorcontainer
serviceUrl="https://ej2services.syncfusion.com/production/web-services/api/documenteditor/"
style="display:block;height:660px" [enableToolbar]=true [(ngModel)]="editor"> </ejs-documenteditorcontainer>
</div>
</div>
TS:
import { Component, ViewEncapsulation } from '@angular/core';
import { ToolbarService } from '@syncfusion/ej2-angular-documenteditor';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
providers: [ToolbarService]
})
export class AppComponent {
editor: any = 'www.someWordFileFromOneDriveOrFromGoogleDrive.com'
}
终于找到窍门了。我不知道为什么 Syncfusion 没有在他们的文档中提到这个 api。但它有效! Stackblitz 演示是 here。您可以按照这个想法将您的word文件加载到ejs-documenteditorcontainer
。
添加到 HTML:
<input id="open_word" #open_word style="position:fixed; left:-100em" type="file" (change)="onFileChange($event)" accept=".dotx,.docx,.docm,.dot,.doc,.rtf,.txt,.xml,.sfdt"/>
<button ejs-button (click)="onFileOpenClick()">Import</button>
添加到 TS:
public onFileOpenClick() :void {
document.getElementById('open_word').click();
}
public onFileChange(e: any) :void {
if (e.target.files[0]) {
let file = e.target.files[0];
if (file.name.substr(file.name.lastIndexOf('.')) !== '.sfdt') {
this.loadFile(file);
}
}
}
public loadFile(file: File): void {
const serviceUrl = 'https://ej2services.syncfusion.com/production/web-services/api/documenteditor/';
let ajax: XMLHttpRequest = new XMLHttpRequest();
ajax.open('POST', serviceUrl + 'Import', true);
ajax.onreadystatechange = () => {
if (ajax.readyState === 4) {
if (ajax.status === 200 || ajax.status === 304) {
// open SFDT text in document editor
this.documentEditor.open(ajax.responseText);
}
}
}
let formData: FormData = new FormData();
formData.append('files', file);
ajax.send(formData);
}
旧答案:其实加载起来也不容易。您需要将 doc/docx 文件转换为 SFDT 格式并使用文档编辑器打开它,或者您可以使用 .NET Standard 库 Syncfusion.EJ2.WordEditor.AspNet.Core
进行此文件转换网络 API 服务实施。
您可以查看this documentation from Syncfusion了解详情。
文档编辑器不是表单元素。因此它不支持用于绑定数据的 ngModel 指令。它只接受 SFDT Json 字符串。因此,您需要将 word 文档转换为 SFDT,以便通过文档编辑器的打开 API 在编辑器中打开它。
https://ej2.syncfusion.com/documentation/api/document-editor#open
要在加载时打开文件,您可以使用文档编辑器的创建事件。
https://ej2.syncfusion.com/documentation/api/document-editor#created
示例 link 以在创建的事件中打开 SFDT 数据:https://stackblitz.com/edit/angular-7tvebw-3abz1v?file=app.component.html
要将 word 文档转换为 SFDT 以在编辑器中加载它,您需要 server-side 交互。
在server-side.
中,请参考以下文档将word文档转换为SFDT您还可以查看以下文档platform-wise,了解文档编辑器所需的 Web 服务。
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/core/
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/mvc/
https://ej2.syncfusion.com/angular/documentation/document-editor/web-services/java/