EditorOnline.Sdk
1.0.0
See the version list below for details.
dotnet add package EditorOnline.Sdk --version 1.0.0
NuGet\Install-Package EditorOnline.Sdk -Version 1.0.0
<PackageReference Include="EditorOnline.Sdk" Version="1.0.0" />
<PackageVersion Include="EditorOnline.Sdk" Version="1.0.0" />
<PackageReference Include="EditorOnline.Sdk" />
paket add EditorOnline.Sdk --version 1.0.0
#r "nuget: EditorOnline.Sdk, 1.0.0"
#:package EditorOnline.Sdk@1.0.0
#addin nuget:?package=EditorOnline.Sdk&version=1.0.0
#tool nuget:?package=EditorOnline.Sdk&version=1.0.0
EditorOnline
Edite documentos de Office dentro de su aplicación .NET. Word, Excel, PowerPoint, PDF y formularios rellenables, en el navegador, sin instalar nada en la máquina del usuario. Al guardar, el archivo llega a su endpoint.
dotnet add package EditorOnline.Sdk
.NET 8, 9 y 10. Sin dependencias externas.
En marcha
Levante el contenedor del editor. Es la única infraestructura que hace falta.
docker run -d --name editoronline -p 8099:80 LA-IMAGEN-DEL-EDITOR
Registre el SDK:
using EditorOnline;
builder.Services.AddEditorOnline(clave, o =>
{
o.ServidorUrl = "https://editor.miempresa.cr"; // el contenedor, visto por el navegador
});
var app = builder.Build();
app.MapEditorOnline(); // publica el componente desde su propio dominio
Cargue el componente una vez, en el layout:
@inject EditorOnline.IEditorOnline Editor
@Html.Raw(Editor.ObtenerEtiquetaScript())
Y abra un documento desde cualquier página:
EditorOnline.Open({
urlGetDocumento: '/api/expedientes/482/documento', // su backend lo entrega
saveUrl: '/api/expedientes/482/documento', // y lo recibe al guardar
saveFields: { idExpediente: '482' },
onSave: r => console.log(r.fileName, r.response)
});
El endpoint que lo recibe es un formulario normal:
app.MapPost("/api/expedientes/{id}/documento", async (int id, HttpRequest req) =>
{
var form = await req.ReadFormAsync();
var archivo = form.Files["file"]!;
// guárdelo donde corresponda
return Results.Ok(new { ok = true });
});
Qué abre
El tipo sale de la extensión. No hay que indicarlo.
| Formato | Se abre con |
|---|---|
| docx, doc, odt, rtf, txt | Editor de documentos |
| xlsx, xls, ods, csv | Hoja de cálculo |
| pptx, ppt, odp | Presentaciones |
| Editor de PDF | |
| pdf con campos | Formularios |
Si el nombre no trae extensión, dígalo con typeFile: 'xlsx'.
De dónde sale el documento
urlGetDocumento es lo habitual: el archivo lo entrega su backend y nunca pasa
por el navegador del usuario. Acepta dos respuestas, binaria o
{ nombre, tipo, base64 }, y deduce el nombre de la cabecera, de la URL o del
tipo de contenido.
También sirve file (un input), base64, arrayBuffer o url.
Guardar
Guardar no cierra el editor. Fuerza el guardado, recoge el archivo, se lo pasa
a onSave y lo sube a saveUrl. Al cerrar con cambios pendientes, pregunta.
saveUrl se decide al abrir cada documento. La opción UrlDeGuardado es solo
el valor por defecto, para cuando todo va al mismo sitio.
PDF: editar o rellenar
Son dos cosas distintas y el editor no lo adivina.
EditorOnline.Open({ file }) // editar, por defecto
EditorOnline.Open({ file, modoPdf: 'rellenar' }) // solo los campos
EditorOnline.Open({ file, modoPdf: 'preguntar' }) // deja elegir al usuario
En modo rellenar el usuario escribe en los campos y el resto queda protegido.
Si el editor no responde
No hace falta comprobarlo antes. Intente abrir y, si no hay nadie, el componente avisa:
EditorOnline.Open({ file, onUnavailable: e => mostrarAviso(e.servidor) });
Open rechaza la promesa con e.codigo === 'no-disponible'.
La API
AddEditorOnline(clave, opciones) |
Valida la clave al arrancar. Si no sirve, no registra nada y explica por qué |
TryAddEditorOnline(clave, opciones) |
Igual, pero devuelve false en vez de lanzar |
MapEditorOnline() |
Publica el JavaScript, embebido en el paquete. Sin CDN ni CORS |
ObtenerEtiquetaScript() |
La etiqueta <script> lista, con la configuración resuelta |
ObtenerConfiguracion() |
Las mismas URLs, si prefiere montar la etiqueta usted |
Opciones
| Opción | Por defecto | |
|---|---|---|
ServidorUrl |
http://127.0.0.1:8099 |
El contenedor, visto por el navegador. Casi siempre lo único que hay que poner |
UrlDeGuardado |
vacío | Endpoint por defecto. El saveUrl de Open manda sobre este |
Idioma |
es |
Interfaz del editor |
AutoGuardado |
true |
El editor transmite los cambios al contenedor mientras se escribe, por si se cierra la pestaña |
RutaScript |
/editoronline/EditorOnline.js |
Dónde se publica el .js |
Su aplicación no necesita ser alcanzable
El contenedor lleva dentro la pieza que recibe el documento, se lo sirve al editor y devuelve cada versión guardada. Se busca a sí mismo, así que no hay URL pública que declarar, ni carpeta temporal, ni almacén de sesiones.
Por eso su aplicación escala sin estado: el documento en edición vive en el contenedor, nunca en ella. El contenedor del editor, en cambio, conviene que sea uno solo o con sesiones pegajosas.
Un detalle que ahorra un rato: ServidorUrl es la dirección vista por el
navegador. Si su aplicación corre en Docker junto al editor, no ponga
http://editoronline, que solo existe dentro de la red de Docker.
La clave de activación
AddEditorOnline la exige. El paquete compara hashes SHA-256, nunca la clave
en claro. Trátela como una credencial:
dotnet user-secrets set "EditorOnline:Clave" "su-clave"
En producción, variable de entorno EditorOnline__Clave o el gestor de
secretos de su nube. Nunca en appsettings.json ni en el código.
Para solicitar la suya: andreyclemen@gmail.com
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.