Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Document Solutions for PDF JS Samples

Samples for Document Solutions for PDF JS (DsPdfJS) (@mescius/ds-pdf) - a JavaScript/TypeScript library for working with PDF documents, SVG documents, and raster bitmaps that can be saved as PNG or JPEG in the browser or in Node.js. See the DsPdfJS product page for full details, documentation, and licensing, or try the live demos in your browser.

DsPdfJS lets you:

  • Create, load, merge, and split PDF documents; work with text, annotations, links, AcroForms, redactions, encryption, and metadata.
  • Draw text and 2D graphics to a PDF page, an SVG document, or a bitmap using a single DrawingContext-based API that resembles the HTML <canvas> 2D context.
  • Use an advanced text layout engine: paragraphs and columns, mixed fonts and formats, vertical (East Asian) and right-to-left text, font fallbacks, and the latest Unicode standards for bidi, segmentation, and line breaking.
  • Convert between formats — e.g., save PDF pages as SVG or PNG, or draw an SVG onto a PDF page as vector graphics.

The library is powered by a WebAssembly (Wasm) module (DsPdf.wasm) implemented in C++ and exposed through a rich JavaScript/TypeScript API. It provides functionality comparable to Document Solutions for PDF .NET (DsPdf) and Document Solutions for Imaging .NET (DsImaging), while being designed specifically for JavaScript, TypeScript, and Wasm.

Samples

Browser samples

  • getting-started: A React + TypeScript + Vite app showing how to connect to DsPdfJS and draw the same text and graphics to a PDF page, an SVG document, and a bitmap saved as PNG.
  • pdf-form-fill-flatten: Fill an AcroForm PDF from JSON and save editable or flattened output.
  • multilingual-typesetting: Bidirectional Arabic and Hebrew, vertical Japanese, automatic font fallback across six scripts, and Unicode line breaking (spaceless Thai) - typeset to PDF in the browser.
  • pii-search-and-redact: Find common PII and exact text in a PDF, preview the matches, permanently redact selected values, and verify that they can no longer be extracted.
  • pdf-text-replace: Find and replace text in a PDF with PdfDocument.replaceText(), apply multiple replacements (with an optional replacement font and size) to the same document, and preview the result in the browser.
  • pdf-merge-split: Merge PDFs and page ranges, reorder and delete pages with live thumbnails, extract ranges, and split a document into parts - entirely client-side.

Node.js samples

  • json-to-pdf-invoice: A Node.js + TypeScript CLI that turns invoice JSON into a multi-page PDF with an SVG logo, automatic pagination, totals, metadata, and page-number footers.

Running a sample

Each sample is a self-contained npm project with its own README and commands.

Browser samples

cd samples/<sample-name>
npm install
npm run dev

Open the local URL printed by the development server.

Node.js samples

cd samples/<sample-name>
npm install
npm run generate

Generated files are written to the sample's output directory. See the sample's README for additional commands and configuration.

Downloading a single sample

To get just one sample without cloning the whole repository, you can use tiged:

npx tiged GrapeCity/DsPdfJS/samples/<sample-name><sample-name>

License

The sample code in this repository is licensed under the MIT License.

Note: the @mescius/ds-pdf package itself is a commercial product and is licensed separately under the MESCIUS EULA. Without a license key, DsPdfJS runs in trial mode and some PDF loading/generation features may be restricted. See the DsPdfJS product page for licensing details.

About

Samples for Document Solutions for PDF JS (DsPdfJS): create, edit, redact, convert, and render PDFs, SVG, and images with JavaScript, TypeScript, and WebAssembly.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors