Compare commits

...
Author SHA1 Message Date
alam00000 0a3dd8e48f Host funding manifest on bentopdf.com for FLOSS/fund 2026-11-02 20:10:15 +05:30
alam00000 72b70be757 Add funding.json and funding manifest URL for project sponsorship 2026-11-02 19:49:39 +05:30
alam00000 f638f8e4db Release v2.8.11 2026-10-31 16:50:27 +05:30
Alam 24b060a134 Merge pull request #919 from kelseyjmw/fix-crop-scroll
Fix crop scroll
2026-10-31 16:38:58 +05:30
alam00000 6dca41aeb4 revert ICLA.md changes 2026-10-31 16:26:50 +05:30
alam00000 2a8ce12b6e add support for GFM inline math delimiters 2026-10-31 16:16:23 +05:30
Alam d03594a09d Merge pull request #964 from alam00000/chore/update-pdf-engine
build(deps): bump PDF engine and viewer to 3f6b6114b166
2026-10-31 16:03:14 +05:30
Kelsey White a25c6511ce Signed ICLA.md 2026-10-16 13:19:17 -03:00
Kelsey White 6d8ef7d694 Fix for issue 903: Crop tool now moves page focus to top after use 2026-10-16 13:09:32 -03:00
9 changed files with 159 additions and 5 deletions
+1
View File
@@ -1 +1,2 @@
https://www.bentopdf.com/funding.json
https://bentopdf.com/funding.json
+2 -2
View File
@@ -7,10 +7,10 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.0.9
version: 1.0.10
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: '2.8.10'
appVersion: '2.8.11'
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "bento-pdf",
"private": true,
"version": "2.8.10",
"version": "2.8.11",
"license": "AGPL-3.0-only",
"type": "module",
"scripts": {
+2
View File
@@ -0,0 +1,2 @@
https://www.bentopdf.com/funding.json
https://bentopdf.com/funding.json
+123
View File
@@ -0,0 +1,123 @@
{
"$schema": "https://fundingjson.org/schema/v1.1.0.json",
"version": "v1.1.0",
"entity": {
"type": "organisation",
"role": "owner",
"name": "BentoPDF",
"email": "[email protected]",
"description": "BentoPDF is building an independent, open source document technology ecosystem. Our goal is to replace the external dependencies behind PDF processing and document understanding with engines we develop and maintain ourselves: Kura for PDF processing, standards and preflight, Hyper Compress for compression, and BentoParse, a lightweight document understanding engine that runs fully offline on ordinary CPUs (not yet public). BentoPDF, our browser based PDF toolkit, is the application through which these engines reach users.\n\nOur software runs locally, including in the browser through WebAssembly, so documents never have to leave the user's device. BentoPDF, Kura and Hyper Compress are licensed under AGPL-3.0, and the work is sustained by commercial licenses sold to companies that embed them in closed-source products, alongside community sponsorships.",
"webpageUrl": {
"url": "https://www.bentopdf.com",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
}
},
"projects": [
{
"guid": "bentopdf",
"name": "BentoPDF",
"description": "BentoPDF is a privacy first PDF toolkit with 100+ tools that run entirely in the browser: merge, split, compress, edit, sign, OCR, convert and more, with no uploads, no accounts and no task limits. Files are processed on the user's device through WebAssembly, and BentoPDF is the application through which our own engines reach users. Hyper Compress already powers its compression tool.\n\nIt can be self hosted with a single Docker command, including in air gapped environments, which makes it a fit for people and organisations that cannot send documents to third party servers. BentoPDF has over 15 million Docker downloads, more than 16,000 GitHub stars and 1,400 forks, and its interface is available in 24 languages.",
"webpageUrl": {
"url": "https://www.bentopdf.com",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf",
"wellKnown": "https://github.com/alam00000/bentopdf/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"privacy",
"productivity",
"document-processing",
"webassembly",
"self-hosted",
"security"
]
},
{
"guid": "kura",
"name": "Kura",
"description": "Kura is an independent engine for PDF processing, conversion, repair, archival, standards validation and print preflight. One engine covers all eleven PDF/A levels, PDF/UA-1 and UA-2, PDF/X-1a through X-6, PDF/E-1 and PDF/VT, plus Factur-X, ZUGFeRD, XRechnung and Order-X e-invoices. It repairs what is wrong, embeds what is missing, and runs 396 bundled preflight profiles covering print checks such as hairlines, rich black, image resolution, overprint, transparency and fonts.\n\nWhere existing tools split this work across renderers, converters and separate validators, Kura brings it into one engine that ships as a CLI, a C library, an npm package, a Docker image and a WebAssembly build that runs entirely in the browser.",
"webpageUrl": {
"url": "https://www.bentopdf.com/kura",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf-kura",
"wellKnown": "https://github.com/alam00000/bentopdf-kura/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"pdf-a",
"accessibility",
"archival",
"preflight",
"e-invoicing",
"publishing",
"webassembly"
]
},
{
"guid": "hyper-compress",
"name": "Hyper Compress",
"description": "Hyper Compress is a PDF compression engine built around verified transformations and document fidelity. It offers a true lossless mode and visual preserving presets, verifies every change that can affect how a page looks and rolls it back when the check fails, and never returns a file larger than the original.\n\nBenchmarked against Ghostscript, MuPDF and qpdf on 2,104 real world PDFs (27,352 engine runs), it achieved median size reductions of 22.4% in lossless mode and 52.3% at the 300 DPI preset, with the lowest corruption rate of any engine measured. It ships as a CLI, Node SDK, C library, self hosted service and a WebAssembly build that runs in the browser.",
"webpageUrl": {
"url": "https://www.bentopdf.com/hyper-compress",
"wellKnown": "https://www.bentopdf.com/.well-known/funding-manifest-urls"
},
"repositoryUrl": {
"url": "https://github.com/alam00000/bentopdf-hyper-compress",
"wellKnown": "https://github.com/alam00000/bentopdf-hyper-compress/raw/main/.well-known/funding-manifest-urls"
},
"licenses": ["spdx:AGPL-3.0-only"],
"tags": [
"pdf",
"compression",
"document-processing",
"webassembly",
"storage",
"privacy"
]
}
],
"funding": {
"channels": [
{
"guid": "bank-transfer",
"type": "bank",
"address": "",
"description": "International bank transfer. Account details are shared privately on request."
},
{
"guid": "github-sponsors",
"type": "payment-provider",
"address": "https://github.com/sponsors/alam00000"
}
],
"plans": [
{
"guid": "core-development",
"status": "active",
"name": "Core development and maintenance",
"description": "Funds sustained engineering time on Kura, Hyper Compress and BentoParse, and on BentoPDF as the application that brings them to users: new engine capabilities, standards coverage, security and bug fixes, benchmarks, WebAssembly builds, and reviewing issues and pull requests.",
"amount": 50000,
"currency": "USD",
"frequency": "yearly",
"channels": ["bank-transfer"]
},
{
"guid": "community-sponsorship",
"status": "active",
"name": "Community sponsorship",
"description": "Any amount, one-time or recurring, through GitHub Sponsors.",
"amount": 0,
"currency": "USD",
"frequency": "monthly",
"channels": ["github-sponsors"]
}
]
}
}
+3 -1
View File
@@ -424,7 +424,7 @@ async function performFlatteningCrop(
return newPdfDoc.save();
}
function resetState() {
export function resetState() {
if (cropperState.cropper) {
cropperState.cropper.destroy();
cropperState.cropper = null;
@@ -447,4 +447,6 @@ function resetState() {
const cropBtn = document.getElementById('crop-button') as HTMLButtonElement;
if (cropBtn) cropBtn.disabled = true;
window.scrollTo({ top: 0, behavior: 'smooth' });
}
+1
View File
@@ -84,6 +84,7 @@ const ESCAPED_MATH: ReadonlyArray<[string, string, boolean]> = [
['\\\\[', '\\\\]', true],
['\\\\(', '\\\\)', false],
['\\[', '\\]', true],
['$`', '`$', false],
];
function escapedMath(state: StateInline, silent: boolean): boolean {
+18
View File
@@ -0,0 +1,18 @@
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { resetState } from '../js/logic/crop-pdf-page.ts';
// Test resetState function for cropping
describe('resetState', () => {
beforeEach(() => {
vi.spyOn(window, 'scrollTo').mockImplementation(() => {});
});
it('scrolls the page to the top after resetting', () => {
resetState();
expect(window.scrollTo).toHaveBeenCalledWith({
top: 0,
behavior: 'smooth',
});
});
});
+8 -1
View File
@@ -58,10 +58,17 @@ describe('Markdown to PDF rendering', () => {
'',
'```math\n\\int x\n```',
'',
'GitHub $`\\sqrt{3}`$ inline.',
'',
'Price $5 and $10, escaped \\$3, code `$q$`.',
].join('\n')
);
expect(root.querySelectorAll('.katex').length).toBe(8);
expect(root.querySelectorAll('.katex').length).toBe(9);
const github = [...root.querySelectorAll('p')].find((p) =>
p.textContent?.startsWith('GitHub')
);
expect(github?.querySelector('.katex')).not.toBeNull();
expect(github?.textContent).not.toMatch(/[$`‘’]/);
expect(root.querySelectorAll('.katex-display').length).toBe(5);
expect(root.querySelector('em')).toBeNull();
expect(root.textContent).toContain('Price $5 and $10, escaped $3');