securityos/node_modules/rtf.js/GETTING_STARTED.md

199 lines
5.9 KiB
Markdown
Raw Normal View History

2024-09-06 15:32:35 +00:00
This guide shows how to use the library to render a basic rtf file
# Loading rtf.js as a script
## Prerequisites
- Include a promise polyfill if you have to support older browsers
## Code
Put the following code into a html file:
```html
<script src="../vendor/WMFJS.bundle.js"></script>
<script src="../vendor/EMFJS.bundle.js"></script>
<script src="../vendor/RTFJS.bundle.js"></script>
<script>
const rtf =
`{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}
{\\*\\generator Msftedit 5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22 This \\fs44 is \\fs22 a \\b simple \\ul one \\i paragraph \\ulnone\\b0 document\\i0 .\\par
}`;
function stringToArrayBuffer(string) {
const buffer = new ArrayBuffer(string.length);
const bufferView = new Uint8Array(buffer);
for (let i = 0; i < string.length; i++) {
bufferView[i] = string.charCodeAt(i);
}
return buffer;
}
RTFJS.loggingEnabled(false);
WMFJS.loggingEnabled(false);
EMFJS.loggingEnabled(false);
const doc = new RTFJS.Document(stringToArrayBuffer(rtf));
const meta = doc.metadata();
doc.render().then(function(htmlElements) {
console.log("Meta:");
console.log(meta);
console.log("Html:");
console.log(htmlElements);
}).catch(error => console.error(error))
</script>
```
# Importing rtf.js as a module
## Prerequisites
- Install rtf.js from npm (`npm install rtf.js`)
## Code
```javascript
import {EMFJS, RTFJS, WMFJS} from 'rtf.js';
const rtf =
`{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}
{\\*\\generator Msftedit 5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22 This \\fs44 is \\fs22 a \\b simple \\ul one \\i paragraph \\ulnone\\b0 document\\i0 .\\par
}`;
function stringToArrayBuffer(string) {
const buffer = new ArrayBuffer(string.length);
const bufferView = new Uint8Array(buffer);
for (let i = 0; i < string.length; i++) {
bufferView[i] = string.charCodeAt(i);
}
return buffer;
}
RTFJS.loggingEnabled(false);
WMFJS.loggingEnabled(false);
EMFJS.loggingEnabled(false);
const doc = new RTFJS.Document(stringToArrayBuffer(rtf));
const meta = doc.metadata();
doc.render().then(function(htmlElements) {
console.log("Meta:");
console.log(meta);
console.log("Html:");
console.log(htmlElements);
}).catch(error => console.error(error))
```
# Importing rtf.js as a module (Typescript)
## Prerequisites
- Install rtf.js from npm (`npm install rtf.js`)
- Disable lib check in `tsconfig.json` (add `"skipLibCheck": true`)
## Code
```typescript
import {EMFJS, RTFJS, WMFJS} from 'rtf.js';
const rtf: string =
`{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}
{\\*\\generator Msftedit 5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22 This \\fs44 is \\fs22 a \\b simple \\ul one \\i paragraph \\ulnone\\b0 document\\i0 .\\par
}`;
function stringToArrayBuffer(string) {
const buffer = new ArrayBuffer(string.length);
const bufferView = new Uint8Array(buffer);
for (let i = 0; i < string.length; i++) {
bufferView[i] = string.charCodeAt(i);
}
return buffer;
}
RTFJS.loggingEnabled(false);
WMFJS.loggingEnabled(false);
EMFJS.loggingEnabled(false);
const doc = new RTFJS.Document(stringToArrayBuffer(rtf));
const meta = doc.metadata();
doc.render().then(function(htmlElements) {
console.log("Meta:");
console.log(meta);
console.log("Html:");
console.log(htmlElements);
}).catch(error => console.error(error))
```
# Node (using jsdom)
## Prerequisites
- Install rtf.js and jsdom from npm (`npm install rtf.js jsdom`)
## Code
This is a minimal example for wrapper around rtf.js and jsdom:
```javascript
const jsdom = require("jsdom");
const {JSDOM} = jsdom;
const rtf =
`{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}
{\\*\\generator Msftedit 5.41.21.2510;}\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22 This \\fs44 is \\fs22 a \\b simple \\ul one \\i paragraph \\ulnone\\b0 document\\i0 .\\par
}`;
function stringToArrayBuffer(string) {
const buffer = new ArrayBuffer(string.length);
const bufferView = new Uint8Array(buffer);
for (let i = 0; i < string.length; i++) {
bufferView[i] = string.charCodeAt(i);
}
return buffer;
}
function runRtfjs(rtf, callback, errorCallback) {
const virtualConsole = new jsdom.VirtualConsole();
virtualConsole.sendTo(console);
new JSDOM(`
<script src="./node_modules/rtf.js/dist/WMFJS.bundle.js"></script>
<script src="./node_modules/rtf.js/dist/EMFJS.bundle.js"></script>
<script src="./node_modules/rtf.js/dist/RTFJS.bundle.js"></script>
<script>
RTFJS.loggingEnabled(false);
WMFJS.loggingEnabled(false);
EMFJS.loggingEnabled(false);
try {
const doc = new RTFJS.Document(rtfFile);
const meta = doc.metadata();
doc.render().then(function(htmlElements) {
const div = document.createElement("div");
div.append(...htmlElements);
window.done(meta, div.innerHTML);
}).catch(error => window.onerror(error))
} catch (error){
window.onerror(error)
}
</script>
`, {
resources: "usable",
runScripts: "dangerously",
url: "file://" + __dirname + "/",
virtualConsole,
beforeParse(window) {
window.rtfFile = stringToArrayBuffer(rtf);
window.done = function (meta, html) {
callback(meta, html);
};
window.onerror = function (error) {
errorCallback(error)
};
}
});
}
runRtfjs(
rtf,
(meta, html) => {
console.log("Meta:");
console.log(meta);
console.log("Html:");
console.log(html);
},
error => console.error(error));
```