Quindi stavo pensando di scrivere un sistema di documento (layout?). Perché reinventare la ruota? Bene, voglio una ruota adatta al mio carrello. Sto facendo un'applicazione "più grande" basata sul web e ho bisogno di generare / modificare / distribuire molti tipi di documenti principalmente di testo. Un caso d'uso è:
Generate a prefilled letter that’s presented to the user, who edits the text-content slightly and the document gets stored to DB and sent off as PDF to some email-recipient
La ragione per cui mi sto chiedendo è se ci sono dei problemi che mi mancano o qualsiasi soluzione presente che non sono consapevole di ciò risolve questo in un modo più rapido / standardizzato!
Vorrei:
- Visualizza questi nel browser (insieme ad altri contenuti web), con la semplice modifica e formattazione del testo di wysiwyg
- Essere in grado di esportare il documento in PDF / Docx / HTML
- Genera modelli di stratificazione, ad esempio: carta intestata dell'azienda X + layout di lettere predefinito + firme in basso
- avere immagini in linea e avere colonne semplici (per dati tabulari / elenchi)
- memorizzali in un database
- Più pagine
Sto pensando di implementare l'intero documento come oggetto JSON e memorizzarlo in una colonna SQL. Qualsiasi linguaggio che può de / serializzare JSON potrebbe quindi gestire la costruzione del documento. Le immagini possono essere codificate in base64 (e forse comprimere l'oggetto finale?) I modelli possono essere i documenti stessi dove gli elementi hanno id: s in modo che possano essere riempiti a livello di programmazione ecc. Non sono sicuro di come la lunghezza degli elementi funzionerebbe o di posizionamento (forse% - posizionare tutto?). Un esportatore può essere scritto per ogni formato che definisce le posizioni ecc. (Pdf / doc / altro)
Breve esempio di concetto:
var document = {
metadata: {version:1, createdAt:"", createdBy:""},
styles: {},
pages: [{
elementFoo: {
position:[100, 100],
width:100,
content: "Content of the text-element that can be <b>styled</b>"
},
elementBar: {
position:[100, 200],
width:20,
content: "This might be an adress for a letterhead or a footer text or whatever other block"
}]
}