mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 20:02:47 +01:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d9ffe2997 | ||
|
|
d32251014e | ||
|
|
c2147a2f20 |
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "bento-pdf",
|
"name": "bento-pdf",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.4.0",
|
"version": "2.4.1",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+172
-184
@@ -1,230 +1,218 @@
|
|||||||
import { showAlert } from '../ui.js';
|
import { showAlert } from '../ui.js';
|
||||||
import { downloadFile, formatBytes, hexToRgb } from '../utils/helpers.js';
|
import { downloadFile, formatBytes, hexToRgb } from '../utils/helpers.js';
|
||||||
import { PDFDocument as PDFLibDocument, rgb, PageSizes } from 'pdf-lib';
|
import { fixPageSize as fixPageSizeCore } from '../utils/pdf-operations';
|
||||||
import { icons, createIcons } from 'lucide';
|
import { icons, createIcons } from 'lucide';
|
||||||
import { FixPageSizeState } from '@/types';
|
import { FixPageSizeState } from '@/types';
|
||||||
|
|
||||||
const pageState: FixPageSizeState = {
|
const pageState: FixPageSizeState = {
|
||||||
file: null,
|
file: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
function resetState() {
|
function resetState() {
|
||||||
pageState.file = null;
|
pageState.file = null;
|
||||||
|
|
||||||
const fileDisplayArea = document.getElementById('file-display-area');
|
const fileDisplayArea = document.getElementById('file-display-area');
|
||||||
if (fileDisplayArea) fileDisplayArea.innerHTML = '';
|
if (fileDisplayArea) fileDisplayArea.innerHTML = '';
|
||||||
|
|
||||||
const toolOptions = document.getElementById('tool-options');
|
const toolOptions = document.getElementById('tool-options');
|
||||||
if (toolOptions) toolOptions.classList.add('hidden');
|
if (toolOptions) toolOptions.classList.add('hidden');
|
||||||
|
|
||||||
const fileInput = document.getElementById('file-input') as HTMLInputElement;
|
const fileInput = document.getElementById('file-input') as HTMLInputElement;
|
||||||
if (fileInput) fileInput.value = '';
|
if (fileInput) fileInput.value = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateUI() {
|
async function updateUI() {
|
||||||
const fileDisplayArea = document.getElementById('file-display-area');
|
const fileDisplayArea = document.getElementById('file-display-area');
|
||||||
const toolOptions = document.getElementById('tool-options');
|
const toolOptions = document.getElementById('tool-options');
|
||||||
|
|
||||||
if (!fileDisplayArea) return;
|
if (!fileDisplayArea) return;
|
||||||
|
|
||||||
fileDisplayArea.innerHTML = '';
|
fileDisplayArea.innerHTML = '';
|
||||||
|
|
||||||
if (pageState.file) {
|
if (pageState.file) {
|
||||||
const fileDiv = document.createElement('div');
|
const fileDiv = document.createElement('div');
|
||||||
fileDiv.className = 'flex items-center justify-between bg-gray-700 p-3 rounded-lg text-sm';
|
fileDiv.className =
|
||||||
|
'flex items-center justify-between bg-gray-700 p-3 rounded-lg text-sm';
|
||||||
|
|
||||||
const infoContainer = document.createElement('div');
|
const infoContainer = document.createElement('div');
|
||||||
infoContainer.className = 'flex flex-col overflow-hidden';
|
infoContainer.className = 'flex flex-col overflow-hidden';
|
||||||
|
|
||||||
const nameSpan = document.createElement('div');
|
const nameSpan = document.createElement('div');
|
||||||
nameSpan.className = 'truncate font-medium text-gray-200 text-sm mb-1';
|
nameSpan.className = 'truncate font-medium text-gray-200 text-sm mb-1';
|
||||||
nameSpan.textContent = pageState.file.name;
|
nameSpan.textContent = pageState.file.name;
|
||||||
|
|
||||||
const metaSpan = document.createElement('div');
|
const metaSpan = document.createElement('div');
|
||||||
metaSpan.className = 'text-xs text-gray-400';
|
metaSpan.className = 'text-xs text-gray-400';
|
||||||
metaSpan.textContent = formatBytes(pageState.file.size);
|
metaSpan.textContent = formatBytes(pageState.file.size);
|
||||||
|
|
||||||
infoContainer.append(nameSpan, metaSpan);
|
infoContainer.append(nameSpan, metaSpan);
|
||||||
|
|
||||||
const removeBtn = document.createElement('button');
|
const removeBtn = document.createElement('button');
|
||||||
removeBtn.className = 'ml-4 text-red-400 hover:text-red-300 flex-shrink-0';
|
removeBtn.className = 'ml-4 text-red-400 hover:text-red-300 flex-shrink-0';
|
||||||
removeBtn.innerHTML = '<i data-lucide="trash-2" class="w-4 h-4"></i>';
|
removeBtn.innerHTML = '<i data-lucide="trash-2" class="w-4 h-4"></i>';
|
||||||
removeBtn.onclick = function () {
|
removeBtn.onclick = function () {
|
||||||
resetState();
|
resetState();
|
||||||
};
|
};
|
||||||
|
|
||||||
fileDiv.append(infoContainer, removeBtn);
|
fileDiv.append(infoContainer, removeBtn);
|
||||||
fileDisplayArea.appendChild(fileDiv);
|
fileDisplayArea.appendChild(fileDiv);
|
||||||
createIcons({ icons });
|
createIcons({ icons });
|
||||||
|
|
||||||
if (toolOptions) toolOptions.classList.remove('hidden');
|
if (toolOptions) toolOptions.classList.remove('hidden');
|
||||||
} else {
|
} else {
|
||||||
if (toolOptions) toolOptions.classList.add('hidden');
|
if (toolOptions) toolOptions.classList.add('hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFileSelect(files: FileList | null) {
|
function handleFileSelect(files: FileList | null) {
|
||||||
if (files && files.length > 0) {
|
if (files && files.length > 0) {
|
||||||
const file = files[0];
|
const file = files[0];
|
||||||
if (file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf')) {
|
if (
|
||||||
pageState.file = file;
|
file.type === 'application/pdf' ||
|
||||||
updateUI();
|
file.name.toLowerCase().endsWith('.pdf')
|
||||||
}
|
) {
|
||||||
|
pageState.file = file;
|
||||||
|
updateUI();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fixPageSize() {
|
async function fixPageSize() {
|
||||||
if (!pageState.file) {
|
if (!pageState.file) {
|
||||||
showAlert('No File', 'Please upload a PDF file first.');
|
showAlert('No File', 'Please upload a PDF file first.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const targetSizeKey = (document.getElementById('target-size') as HTMLSelectElement).value;
|
const targetSize = (
|
||||||
const orientation = (document.getElementById('orientation') as HTMLSelectElement).value;
|
document.getElementById('target-size') as HTMLSelectElement
|
||||||
const scalingMode = (document.querySelector('input[name="scaling-mode"]:checked') as HTMLInputElement).value;
|
).value;
|
||||||
const backgroundColor = hexToRgb((document.getElementById('background-color') as HTMLInputElement).value);
|
const orientation = (
|
||||||
|
document.getElementById('orientation') as HTMLSelectElement
|
||||||
|
).value;
|
||||||
|
const scalingMode = (
|
||||||
|
document.querySelector(
|
||||||
|
'input[name="scaling-mode"]:checked'
|
||||||
|
) as HTMLInputElement
|
||||||
|
).value;
|
||||||
|
const backgroundColor = hexToRgb(
|
||||||
|
(document.getElementById('background-color') as HTMLInputElement).value
|
||||||
|
);
|
||||||
|
|
||||||
const loaderModal = document.getElementById('loader-modal');
|
const loaderModal = document.getElementById('loader-modal');
|
||||||
const loaderText = document.getElementById('loader-text');
|
const loaderText = document.getElementById('loader-text');
|
||||||
if (loaderModal) loaderModal.classList.remove('hidden');
|
if (loaderModal) loaderModal.classList.remove('hidden');
|
||||||
if (loaderText) loaderText.textContent = 'Standardizing pages...';
|
if (loaderText) loaderText.textContent = 'Standardizing pages...';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let targetWidth, targetHeight;
|
const customWidth =
|
||||||
|
parseFloat(
|
||||||
|
(document.getElementById('custom-width') as HTMLInputElement)?.value
|
||||||
|
) || 210;
|
||||||
|
const customHeight =
|
||||||
|
parseFloat(
|
||||||
|
(document.getElementById('custom-height') as HTMLInputElement)?.value
|
||||||
|
) || 297;
|
||||||
|
const customUnits =
|
||||||
|
(document.getElementById('custom-units') as HTMLSelectElement)?.value ||
|
||||||
|
'mm';
|
||||||
|
|
||||||
if (targetSizeKey === 'Custom') {
|
const arrayBuffer = await pageState.file.arrayBuffer();
|
||||||
const width = parseFloat((document.getElementById('custom-width') as HTMLInputElement).value);
|
const pdfBytes = new Uint8Array(arrayBuffer);
|
||||||
const height = parseFloat((document.getElementById('custom-height') as HTMLInputElement).value);
|
|
||||||
const units = (document.getElementById('custom-units') as HTMLSelectElement).value;
|
|
||||||
|
|
||||||
if (units === 'in') {
|
const newPdfBytes = await fixPageSizeCore(pdfBytes, {
|
||||||
targetWidth = width * 72;
|
targetSize,
|
||||||
targetHeight = height * 72;
|
orientation,
|
||||||
} else {
|
scalingMode,
|
||||||
// mm
|
backgroundColor,
|
||||||
targetWidth = width * (72 / 25.4);
|
customWidth,
|
||||||
targetHeight = height * (72 / 25.4);
|
customHeight,
|
||||||
}
|
customUnits,
|
||||||
} else {
|
});
|
||||||
[targetWidth, targetHeight] = PageSizes[targetSizeKey as keyof typeof PageSizes];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (orientation === 'landscape' && targetWidth < targetHeight) {
|
downloadFile(
|
||||||
[targetWidth, targetHeight] = [targetHeight, targetWidth];
|
new Blob([new Uint8Array(newPdfBytes)], { type: 'application/pdf' }),
|
||||||
} else if (orientation === 'portrait' && targetWidth > targetHeight) {
|
'standardized.pdf'
|
||||||
[targetWidth, targetHeight] = [targetHeight, targetWidth];
|
);
|
||||||
}
|
showAlert(
|
||||||
|
'Success',
|
||||||
const arrayBuffer = await pageState.file.arrayBuffer();
|
'Page sizes standardized successfully!',
|
||||||
const sourceDoc = await PDFLibDocument.load(arrayBuffer);
|
'success',
|
||||||
const newDoc = await PDFLibDocument.create();
|
() => {
|
||||||
|
resetState();
|
||||||
for (const sourcePage of sourceDoc.getPages()) {
|
}
|
||||||
const { width: sourceWidth, height: sourceHeight } = sourcePage.getSize();
|
);
|
||||||
const embeddedPage = await newDoc.embedPage(sourcePage);
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
const newPage = newDoc.addPage([targetWidth, targetHeight]);
|
showAlert('Error', 'An error occurred while standardizing pages.');
|
||||||
newPage.drawRectangle({
|
} finally {
|
||||||
x: 0,
|
if (loaderModal) loaderModal.classList.add('hidden');
|
||||||
y: 0,
|
}
|
||||||
width: targetWidth,
|
|
||||||
height: targetHeight,
|
|
||||||
color: rgb(backgroundColor.r, backgroundColor.g, backgroundColor.b),
|
|
||||||
});
|
|
||||||
|
|
||||||
const scaleX = targetWidth / sourceWidth;
|
|
||||||
const scaleY = targetHeight / sourceHeight;
|
|
||||||
const scale = scalingMode === 'fit' ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);
|
|
||||||
|
|
||||||
const scaledWidth = sourceWidth * scale;
|
|
||||||
const scaledHeight = sourceHeight * scale;
|
|
||||||
|
|
||||||
const x = (targetWidth - scaledWidth) / 2;
|
|
||||||
const y = (targetHeight - scaledHeight) / 2;
|
|
||||||
|
|
||||||
newPage.drawPage(embeddedPage, {
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
width: scaledWidth,
|
|
||||||
height: scaledHeight,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const newPdfBytes = await newDoc.save();
|
|
||||||
downloadFile(
|
|
||||||
new Blob([new Uint8Array(newPdfBytes)], { type: 'application/pdf' }),
|
|
||||||
'standardized.pdf'
|
|
||||||
);
|
|
||||||
showAlert('Success', 'Page sizes standardized successfully!', 'success', () => { resetState(); });
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
showAlert('Error', 'An error occurred while standardizing pages.');
|
|
||||||
} finally {
|
|
||||||
if (loaderModal) loaderModal.classList.add('hidden');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
const fileInput = document.getElementById('file-input') as HTMLInputElement;
|
const fileInput = document.getElementById('file-input') as HTMLInputElement;
|
||||||
const dropZone = document.getElementById('drop-zone');
|
const dropZone = document.getElementById('drop-zone');
|
||||||
const processBtn = document.getElementById('process-btn');
|
const processBtn = document.getElementById('process-btn');
|
||||||
const backBtn = document.getElementById('back-to-tools');
|
const backBtn = document.getElementById('back-to-tools');
|
||||||
const targetSizeSelect = document.getElementById('target-size');
|
const targetSizeSelect = document.getElementById('target-size');
|
||||||
const customSizeWrapper = document.getElementById('custom-size-wrapper');
|
const customSizeWrapper = document.getElementById('custom-size-wrapper');
|
||||||
|
|
||||||
if (backBtn) {
|
if (backBtn) {
|
||||||
backBtn.addEventListener('click', function () {
|
backBtn.addEventListener('click', function () {
|
||||||
window.location.href = import.meta.env.BASE_URL;
|
window.location.href = import.meta.env.BASE_URL;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup custom size toggle
|
||||||
|
if (targetSizeSelect && customSizeWrapper) {
|
||||||
|
targetSizeSelect.addEventListener('change', function () {
|
||||||
|
customSizeWrapper.classList.toggle(
|
||||||
|
'hidden',
|
||||||
|
(targetSizeSelect as HTMLSelectElement).value !== 'Custom'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileInput && dropZone) {
|
||||||
|
fileInput.addEventListener('change', function (e) {
|
||||||
|
handleFileSelect((e.target as HTMLInputElement).files);
|
||||||
|
});
|
||||||
|
|
||||||
|
dropZone.addEventListener('dragover', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
dropZone.classList.add('bg-gray-700');
|
||||||
|
});
|
||||||
|
|
||||||
|
dropZone.addEventListener('dragleave', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
dropZone.classList.remove('bg-gray-700');
|
||||||
|
});
|
||||||
|
|
||||||
|
dropZone.addEventListener('drop', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
dropZone.classList.remove('bg-gray-700');
|
||||||
|
const files = e.dataTransfer?.files;
|
||||||
|
if (files && files.length > 0) {
|
||||||
|
const pdfFiles = Array.from(files).filter(function (f) {
|
||||||
|
return (
|
||||||
|
f.type === 'application/pdf' ||
|
||||||
|
f.name.toLowerCase().endsWith('.pdf')
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
if (pdfFiles.length > 0) {
|
||||||
|
const dataTransfer = new DataTransfer();
|
||||||
|
dataTransfer.items.add(pdfFiles[0]);
|
||||||
|
handleFileSelect(dataTransfer.files);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Setup custom size toggle
|
fileInput.addEventListener('click', function () {
|
||||||
if (targetSizeSelect && customSizeWrapper) {
|
fileInput.value = '';
|
||||||
targetSizeSelect.addEventListener('change', function () {
|
});
|
||||||
customSizeWrapper.classList.toggle(
|
}
|
||||||
'hidden',
|
|
||||||
(targetSizeSelect as HTMLSelectElement).value !== 'Custom'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileInput && dropZone) {
|
if (processBtn) {
|
||||||
fileInput.addEventListener('change', function (e) {
|
processBtn.addEventListener('click', fixPageSize);
|
||||||
handleFileSelect((e.target as HTMLInputElement).files);
|
}
|
||||||
});
|
|
||||||
|
|
||||||
dropZone.addEventListener('dragover', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
dropZone.classList.add('bg-gray-700');
|
|
||||||
});
|
|
||||||
|
|
||||||
dropZone.addEventListener('dragleave', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
dropZone.classList.remove('bg-gray-700');
|
|
||||||
});
|
|
||||||
|
|
||||||
dropZone.addEventListener('drop', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
dropZone.classList.remove('bg-gray-700');
|
|
||||||
const files = e.dataTransfer?.files;
|
|
||||||
if (files && files.length > 0) {
|
|
||||||
const pdfFiles = Array.from(files).filter(function (f) {
|
|
||||||
return f.type === 'application/pdf' || f.name.toLowerCase().endsWith('.pdf');
|
|
||||||
});
|
|
||||||
if (pdfFiles.length > 0) {
|
|
||||||
const dataTransfer = new DataTransfer();
|
|
||||||
dataTransfer.items.add(pdfFiles[0]);
|
|
||||||
handleFileSelect(dataTransfer.files);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
fileInput.addEventListener('click', function () {
|
|
||||||
fileInput.value = '';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (processBtn) {
|
|
||||||
processBtn.addEventListener('click', fixPageSize);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1133,9 +1133,7 @@ function showNodeSettings(node: BaseWorkflowNode) {
|
|||||||
{ label: 'Top Right', value: 'top-right' },
|
{ label: 'Top Right', value: 'top-right' },
|
||||||
],
|
],
|
||||||
orientation: [
|
orientation: [
|
||||||
{ label: 'Vertical', value: 'vertical' },
|
{ label: 'Auto (Keep Original)', value: 'auto' },
|
||||||
{ label: 'Horizontal', value: 'horizontal' },
|
|
||||||
{ label: 'Auto', value: 'auto' },
|
|
||||||
{ label: 'Portrait', value: 'portrait' },
|
{ label: 'Portrait', value: 'portrait' },
|
||||||
{ label: 'Landscape', value: 'landscape' },
|
{ label: 'Landscape', value: 'landscape' },
|
||||||
],
|
],
|
||||||
@@ -1160,6 +1158,23 @@ function showNodeSettings(node: BaseWorkflowNode) {
|
|||||||
{ label: 'Letter', value: 'letter' },
|
{ label: 'Letter', value: 'letter' },
|
||||||
{ label: 'Legal', value: 'legal' },
|
{ label: 'Legal', value: 'legal' },
|
||||||
],
|
],
|
||||||
|
targetSize: [
|
||||||
|
{ label: 'A4', value: 'A4' },
|
||||||
|
{ label: 'Letter', value: 'Letter' },
|
||||||
|
{ label: 'Legal', value: 'Legal' },
|
||||||
|
{ label: 'A3', value: 'A3' },
|
||||||
|
{ label: 'A5', value: 'A5' },
|
||||||
|
{ label: 'Tabloid', value: 'Tabloid' },
|
||||||
|
{ label: 'Custom', value: 'Custom' },
|
||||||
|
],
|
||||||
|
scalingMode: [
|
||||||
|
{ label: 'Fit (keep full page visible)', value: 'fit' },
|
||||||
|
{ label: 'Fill (cover full target page)', value: 'fill' },
|
||||||
|
],
|
||||||
|
customUnits: [
|
||||||
|
{ label: 'Millimeters (mm)', value: 'mm' },
|
||||||
|
{ label: 'Inches (in)', value: 'in' },
|
||||||
|
],
|
||||||
numberFormat: [
|
numberFormat: [
|
||||||
{ label: 'Simple (1, 2, 3)', value: 'simple' },
|
{ label: 'Simple (1, 2, 3)', value: 'simple' },
|
||||||
{ label: 'Page X of Y', value: 'page_x_of_y' },
|
{ label: 'Page X of Y', value: 'page_x_of_y' },
|
||||||
@@ -1294,6 +1309,9 @@ function showNodeSettings(node: BaseWorkflowNode) {
|
|||||||
text: ['text'],
|
text: ['text'],
|
||||||
area: ['x0', 'y0', 'x1', 'y1'],
|
area: ['x0', 'y0', 'x1', 'y1'],
|
||||||
},
|
},
|
||||||
|
targetSize: {
|
||||||
|
Custom: ['customWidth', 'customHeight', 'customUnits'],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const controlWrappers: Record<string, HTMLElement> = {};
|
const controlWrappers: Record<string, HTMLElement> = {};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { PDFDocument, degrees, rgb, StandardFonts } from 'pdf-lib';
|
import { PDFDocument, degrees, rgb, StandardFonts, PageSizes } from 'pdf-lib';
|
||||||
|
|
||||||
export async function mergePdfs(
|
export async function mergePdfs(
|
||||||
pdfBytesList: Uint8Array[]
|
pdfBytesList: Uint8Array[]
|
||||||
@@ -438,3 +438,87 @@ export async function addPageNumbers(
|
|||||||
|
|
||||||
return new Uint8Array(await pdfDoc.save());
|
return new Uint8Array(await pdfDoc.save());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface FixPageSizeOptions {
|
||||||
|
targetSize: string;
|
||||||
|
orientation: string;
|
||||||
|
scalingMode: string;
|
||||||
|
backgroundColor: { r: number; g: number; b: number };
|
||||||
|
customWidth?: number;
|
||||||
|
customHeight?: number;
|
||||||
|
customUnits?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function fixPageSize(
|
||||||
|
pdfBytes: Uint8Array,
|
||||||
|
options: FixPageSizeOptions
|
||||||
|
): Promise<Uint8Array> {
|
||||||
|
let targetWidth: number;
|
||||||
|
let targetHeight: number;
|
||||||
|
|
||||||
|
if (options.targetSize.toLowerCase() === 'custom') {
|
||||||
|
const w = options.customWidth ?? 210;
|
||||||
|
const h = options.customHeight ?? 297;
|
||||||
|
const units = (options.customUnits ?? 'mm').toLowerCase();
|
||||||
|
if (units === 'in') {
|
||||||
|
targetWidth = w * 72;
|
||||||
|
targetHeight = h * 72;
|
||||||
|
} else {
|
||||||
|
targetWidth = w * (72 / 25.4);
|
||||||
|
targetHeight = h * (72 / 25.4);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const selected =
|
||||||
|
PageSizes[options.targetSize as keyof typeof PageSizes] || PageSizes.A4;
|
||||||
|
targetWidth = selected[0];
|
||||||
|
targetHeight = selected[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
const orientation = options.orientation.toLowerCase();
|
||||||
|
if (orientation === 'landscape' && targetWidth < targetHeight) {
|
||||||
|
[targetWidth, targetHeight] = [targetHeight, targetWidth];
|
||||||
|
} else if (orientation === 'portrait' && targetWidth > targetHeight) {
|
||||||
|
[targetWidth, targetHeight] = [targetHeight, targetWidth];
|
||||||
|
}
|
||||||
|
|
||||||
|
const sourceDoc = await PDFDocument.load(pdfBytes);
|
||||||
|
const outputDoc = await PDFDocument.create();
|
||||||
|
|
||||||
|
for (const sourcePage of sourceDoc.getPages()) {
|
||||||
|
const { width: sourceWidth, height: sourceHeight } = sourcePage.getSize();
|
||||||
|
const embeddedPage = await outputDoc.embedPage(sourcePage);
|
||||||
|
|
||||||
|
const outputPage = outputDoc.addPage([targetWidth, targetHeight]);
|
||||||
|
outputPage.drawRectangle({
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
width: targetWidth,
|
||||||
|
height: targetHeight,
|
||||||
|
color: rgb(
|
||||||
|
options.backgroundColor.r,
|
||||||
|
options.backgroundColor.g,
|
||||||
|
options.backgroundColor.b
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
|
const scaleX = targetWidth / sourceWidth;
|
||||||
|
const scaleY = targetHeight / sourceHeight;
|
||||||
|
const useFill = options.scalingMode.toLowerCase() === 'fill';
|
||||||
|
const scale = useFill ? Math.max(scaleX, scaleY) : Math.min(scaleX, scaleY);
|
||||||
|
|
||||||
|
const scaledWidth = sourceWidth * scale;
|
||||||
|
const scaledHeight = sourceHeight * scale;
|
||||||
|
|
||||||
|
const x = (targetWidth - scaledWidth) / 2;
|
||||||
|
const y = (targetHeight - scaledHeight) / 2;
|
||||||
|
|
||||||
|
outputPage.drawPage(embeddedPage, {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
width: scaledWidth,
|
||||||
|
height: scaledHeight,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Uint8Array(await outputDoc.save());
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
import { ClassicPreset } from 'rete';
|
||||||
|
import { BaseWorkflowNode } from './base-node';
|
||||||
|
import { pdfSocket } from '../sockets';
|
||||||
|
import type { SocketData } from '../types';
|
||||||
|
import { requirePdfInput, processBatch } from '../types';
|
||||||
|
import { fixPageSize } from '../../utils/pdf-operations';
|
||||||
|
import { PDFDocument } from 'pdf-lib';
|
||||||
|
import { hexToRgb } from '../../utils/helpers.js';
|
||||||
|
|
||||||
|
export class FixPageSizeNode extends BaseWorkflowNode {
|
||||||
|
readonly category = 'Organize & Manage' as const;
|
||||||
|
readonly icon = 'ph-frame-corners';
|
||||||
|
readonly description = 'Standardize all pages to a target size';
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super('Fix Page Size');
|
||||||
|
this.addInput('pdf', new ClassicPreset.Input(pdfSocket, 'PDF'));
|
||||||
|
this.addOutput(
|
||||||
|
'pdf',
|
||||||
|
new ClassicPreset.Output(pdfSocket, 'Standardized PDF')
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'targetSize',
|
||||||
|
new ClassicPreset.InputControl('text', { initial: 'A4' })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'orientation',
|
||||||
|
new ClassicPreset.InputControl('text', { initial: 'auto' })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'scalingMode',
|
||||||
|
new ClassicPreset.InputControl('text', { initial: 'fit' })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'backgroundColor',
|
||||||
|
new ClassicPreset.InputControl('text', { initial: '#ffffff' })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'customWidth',
|
||||||
|
new ClassicPreset.InputControl('number', { initial: 210 })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'customHeight',
|
||||||
|
new ClassicPreset.InputControl('number', { initial: 297 })
|
||||||
|
);
|
||||||
|
this.addControl(
|
||||||
|
'customUnits',
|
||||||
|
new ClassicPreset.InputControl('text', { initial: 'mm' })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async data(
|
||||||
|
inputs: Record<string, SocketData[]>
|
||||||
|
): Promise<Record<string, SocketData>> {
|
||||||
|
const pdfInputs = requirePdfInput(inputs, 'Fix Page Size');
|
||||||
|
|
||||||
|
const getText = (key: string, fallback: string) => {
|
||||||
|
const ctrl = this.controls[key] as
|
||||||
|
| ClassicPreset.InputControl<'text'>
|
||||||
|
| undefined;
|
||||||
|
return (ctrl?.value || fallback).trim();
|
||||||
|
};
|
||||||
|
|
||||||
|
const getNum = (key: string, fallback: number) => {
|
||||||
|
const ctrl = this.controls[key] as
|
||||||
|
| ClassicPreset.InputControl<'number'>
|
||||||
|
| undefined;
|
||||||
|
const value = ctrl?.value;
|
||||||
|
return Number.isFinite(value) ? (value as number) : fallback;
|
||||||
|
};
|
||||||
|
|
||||||
|
const targetSize = getText('targetSize', 'A4');
|
||||||
|
const orientation = getText('orientation', 'auto');
|
||||||
|
const scalingMode = getText('scalingMode', 'fit');
|
||||||
|
const backgroundHex = getText('backgroundColor', '#ffffff');
|
||||||
|
const customWidth = Math.max(1, getNum('customWidth', 210));
|
||||||
|
const customHeight = Math.max(1, getNum('customHeight', 297));
|
||||||
|
const customUnits = getText('customUnits', 'mm');
|
||||||
|
const backgroundColor = hexToRgb(backgroundHex);
|
||||||
|
|
||||||
|
return {
|
||||||
|
pdf: await processBatch(pdfInputs, async (input) => {
|
||||||
|
const resultBytes = await fixPageSize(input.bytes, {
|
||||||
|
targetSize,
|
||||||
|
orientation,
|
||||||
|
scalingMode,
|
||||||
|
backgroundColor,
|
||||||
|
customWidth,
|
||||||
|
customHeight,
|
||||||
|
customUnits,
|
||||||
|
});
|
||||||
|
|
||||||
|
const resultDoc = await PDFDocument.load(resultBytes);
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'pdf',
|
||||||
|
document: resultDoc,
|
||||||
|
bytes: resultBytes,
|
||||||
|
filename: input.filename.replace(/\.pdf$/i, '_standardized.pdf'),
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import { ReversePagesNode } from './reverse-pages-node';
|
|||||||
import { AddBlankPageNode } from './add-blank-page-node';
|
import { AddBlankPageNode } from './add-blank-page-node';
|
||||||
import { DividePagesNode } from './divide-pages-node';
|
import { DividePagesNode } from './divide-pages-node';
|
||||||
import { NUpNode } from './n-up-node';
|
import { NUpNode } from './n-up-node';
|
||||||
|
import { FixPageSizeNode } from './fix-page-size-node';
|
||||||
import { CombineSinglePageNode } from './combine-single-page-node';
|
import { CombineSinglePageNode } from './combine-single-page-node';
|
||||||
import { CropNode } from './crop-node';
|
import { CropNode } from './crop-node';
|
||||||
import { GreyscaleNode } from './greyscale-node';
|
import { GreyscaleNode } from './greyscale-node';
|
||||||
@@ -298,6 +299,13 @@ export const nodeRegistry: Record<string, NodeRegistryEntry> = {
|
|||||||
description: 'Arrange multiple pages per sheet',
|
description: 'Arrange multiple pages per sheet',
|
||||||
factory: () => new NUpNode(),
|
factory: () => new NUpNode(),
|
||||||
},
|
},
|
||||||
|
FixPageSizeNode: {
|
||||||
|
label: 'Fix Page Size',
|
||||||
|
category: 'Organize & Manage',
|
||||||
|
icon: 'ph-frame-corners',
|
||||||
|
description: 'Standardize all pages to a target size',
|
||||||
|
factory: () => new FixPageSizeNode(),
|
||||||
|
},
|
||||||
CombineSinglePageNode: {
|
CombineSinglePageNode: {
|
||||||
label: 'Combine to Single Page',
|
label: 'Combine to Single Page',
|
||||||
category: 'Organize & Manage',
|
category: 'Organize & Manage',
|
||||||
|
|||||||
@@ -132,10 +132,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:addAttachments.name"
|
data-i18n="tools:addAttachments.name"
|
||||||
>
|
>
|
||||||
Add Attachments Free Online - Fast & Secure
|
Add Attachments
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:addAttachments.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:addAttachments.subtitle">
|
||||||
Upload a PDF, then add files to embed as attachments.
|
Embed one or more files into your PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- PDF Upload -->
|
<!-- PDF Upload -->
|
||||||
|
|||||||
@@ -126,10 +126,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:addBlankPage.name"
|
data-i18n="tools:addBlankPage.name"
|
||||||
>
|
>
|
||||||
Add Blank Page Free Online - Fast & Secure
|
Add Blank Page
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:addBlankPage.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:addBlankPage.subtitle">
|
||||||
Insert one or more blank pages at any position in your PDF document.
|
Insert an empty page anywhere in your PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -116,11 +116,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:addStamps.name"
|
data-i18n="tools:addStamps.name"
|
||||||
>
|
>
|
||||||
Add Stamps Free Online - Fast & Secure
|
Add Stamps
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:addStamps.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:addStamps.subtitle">
|
||||||
Upload a PDF, add image stamps using the toolbar, and then save the
|
Add image stamps to your PDF using the annotation toolbar.
|
||||||
stamped PDF.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:addWatermark.name"
|
data-i18n="tools:addWatermark.name"
|
||||||
>
|
>
|
||||||
Add Watermark to PDF Free - Protect PDFs
|
Add Watermark
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:addWatermark.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:addWatermark.subtitle">
|
||||||
Add text or image watermarks to your PDF documents with customizable
|
Stamp text or an image over your PDF pages.
|
||||||
opacity and rotation.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -118,10 +118,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:adjustColors.name"
|
data-i18n="tools:adjustColors.name"
|
||||||
>
|
>
|
||||||
Adjust Colors Free Online - PDF Color Correction Tool
|
Adjust Colors
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:adjustColors.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:adjustColors.subtitle">
|
||||||
Fine-tune brightness, contrast, saturation, hue and more in your PDF.
|
Fine-tune brightness, contrast, saturation and more in your PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -132,11 +132,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:alternateMix.name"
|
data-i18n="tools:alternateMix.name"
|
||||||
>
|
>
|
||||||
Alternate Merge Free Online - Combine PDFs Instantly
|
Alternate & Mix Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:alternateMix.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:alternateMix.subtitle">
|
||||||
Upload multiple PDFs and interleave their pages. Drag to reorder the
|
Merge PDFs by alternating pages from each PDF. Preserves Bookmarks.
|
||||||
files, then mix their pages alternately.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,13 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:backgroundColor.name"
|
data-i18n="tools:backgroundColor.name"
|
||||||
>
|
>
|
||||||
Background Color Free Online - Fast & Secure
|
Background Color
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:backgroundColor.subtitle"
|
data-i18n="tools:backgroundColor.subtitle"
|
||||||
>
|
>
|
||||||
Add or change the background color of all pages in your PDF document.
|
Change the background color of your PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,10 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:bmpToPdf.name"
|
data-i18n="tools:bmpToPdf.name"
|
||||||
>
|
>
|
||||||
Bmp To Pdf Converter Free Online - Convert Files Fast
|
BMP to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:bmpToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:bmpToPdf.subtitle">
|
||||||
Convert one or more BMP images into a single PDF file.
|
Create a PDF from one or more BMP images.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:editBookmarks.name"
|
data-i18n="tools:editBookmarks.name"
|
||||||
>
|
>
|
||||||
Bookmark Free Online - Fast & Secure
|
Edit Bookmarks
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:editBookmarks.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:editBookmarks.subtitle">
|
||||||
Add, edit, import, delete and extract PDF bookmarks.
|
Add, edit, import, delete and extract PDF bookmarks.
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:cbzToPdf.name"
|
data-i18n="tools:cbzToPdf.name"
|
||||||
>
|
>
|
||||||
Cbz To Pdf Converter Free Online - Convert Files Fast
|
CBZ to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:cbzToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:cbzToPdf.subtitle">
|
||||||
Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple
|
Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple
|
||||||
|
|||||||
@@ -134,14 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:changePermissions.name"
|
data-i18n="tools:changePermissions.name"
|
||||||
>
|
>
|
||||||
Change Permissions Free Online - Fast & Secure
|
Change Permissions
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:changePermissions.subtitle"
|
data-i18n="tools:changePermissions.subtitle"
|
||||||
>
|
>
|
||||||
Set or change user permissions on a PDF. Modify passwords and access
|
Set or change user permissions on a PDF.
|
||||||
controls.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,14 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:combineToSinglePage.name"
|
data-i18n="tools:combineToSinglePage.name"
|
||||||
>
|
>
|
||||||
Combine Single Page Free Online - Combine PDFs Instantly
|
Combine to Single Page
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:combineToSinglePage.subtitle"
|
data-i18n="tools:combineToSinglePage.subtitle"
|
||||||
>
|
>
|
||||||
Merge all pages of your PDF into one continuous page, either
|
Stitch all pages into one continuous scroll.
|
||||||
horizontally or vertically.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -150,11 +150,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:comparePdfs.name"
|
data-i18n="tools:comparePdfs.name"
|
||||||
>
|
>
|
||||||
Compare Pdfs Free Online - Fast & Secure
|
Compare PDFs
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:comparePdfs.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:comparePdfs.subtitle">
|
||||||
Upload two PDF files to compare them side by side or with overlay
|
Compare two PDFs side by side.
|
||||||
mode.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- File Upload Areas -->
|
<!-- File Upload Areas -->
|
||||||
|
|||||||
@@ -119,11 +119,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:compressPdf.name"
|
data-i18n="tools:compressPdf.name"
|
||||||
>
|
>
|
||||||
Compress PDF Free Online - Reduce File Size Fast
|
Compress PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:compressPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:compressPdf.subtitle">
|
||||||
Reduce file size by choosing the compression method that best suits
|
Reduce the file size of your PDF.
|
||||||
your document. Supports multiple PDFs.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -125,11 +125,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:cropPdf.name"
|
data-i18n="tools:cropPdf.name"
|
||||||
>
|
>
|
||||||
Crop Pdf Free Online - Fast & Secure
|
Crop PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:cropPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:cropPdf.subtitle">
|
||||||
Upload a PDF to visually crop one or more pages. This tool offers a
|
Trim the margins of every page in your PDF.
|
||||||
live preview and two distinct cropping modes.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone -->
|
<!-- Drop Zone -->
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:csvToPdf.name"
|
data-i18n="tools:csvToPdf.name"
|
||||||
>
|
>
|
||||||
Csv To Pdf Converter Free Online - Convert Files Fast
|
CSV to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:csvToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:csvToPdf.subtitle">
|
||||||
Convert CSV (Comma-Separated Values) spreadsheet files to PDF format.
|
Convert CSV spreadsheet files to PDF format. Supports multiple files.
|
||||||
Supports multiple files.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,10 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:decryptPdf.name"
|
data-i18n="tools:decryptPdf.name"
|
||||||
>
|
>
|
||||||
Decrypt PDF Free - Remove Password Online
|
Decrypt PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:decryptPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:decryptPdf.subtitle">
|
||||||
Unlock password-protected PDF files by removing encryption.
|
Unlock PDF by removing password protection.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -119,10 +119,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:deletePages.name"
|
data-i18n="tools:deletePages.name"
|
||||||
>
|
>
|
||||||
Delete PDF Pages Free - Remove Pages Online
|
Delete Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:deletePages.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:deletePages.subtitle">
|
||||||
Remove specific pages or ranges of pages from your PDF file.
|
Remove specific pages from your document.
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
id="drop-zone"
|
id="drop-zone"
|
||||||
|
|||||||
@@ -108,11 +108,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:deskewPdf.name"
|
data-i18n="tools:deskewPdf.name"
|
||||||
>
|
>
|
||||||
Deskew PDF Free Online - Straighten Tilted Scans
|
Deskew PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:deskewPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:deskewPdf.subtitle">
|
||||||
Automatically detect and correct skewed pages in scanned PDFs. Uses
|
Automatically straighten tilted scanned pages using OpenCV.
|
||||||
advanced image processing to straighten tilted documents.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:dividePages.name"
|
data-i18n="tools:dividePages.name"
|
||||||
>
|
>
|
||||||
Divide Pages Free Online - Fast & Secure
|
Divide Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:dividePages.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:dividePages.subtitle">
|
||||||
Split each page of your PDF horizontally or vertically, turning one
|
Divide pages horizontally or vertically.
|
||||||
page into two.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,13 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:editAttachments.name"
|
data-i18n="tools:editAttachments.name"
|
||||||
>
|
>
|
||||||
Edit Attachments Free Online - Edit PDFs Securely
|
Edit Attachments
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:editAttachments.subtitle"
|
data-i18n="tools:editAttachments.subtitle"
|
||||||
>
|
>
|
||||||
Upload a PDF to view and remove its embedded attachments.
|
View or remove attachments in your PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:editMetadata.name"
|
data-i18n="tools:editMetadata.name"
|
||||||
>
|
>
|
||||||
Edit Metadata Free Online - Edit PDFs Securely
|
Edit Metadata
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:editMetadata.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:editMetadata.subtitle">
|
||||||
Edit metadata fields in your PDF document including title, author,
|
Change the author, title, and other properties.
|
||||||
subject, and keywords.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfEditor.name"
|
data-i18n="tools:pdfEditor.name"
|
||||||
>
|
>
|
||||||
Edit PDF Free Online - Modify PDFs Securely
|
PDF Editor
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfEditor.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfEditor.subtitle">
|
||||||
Annotate, highlight, redact, comment, add shapes/images, search, and
|
Annotate, highlight, redact, comment, add shapes/images, search, and
|
||||||
|
|||||||
@@ -125,7 +125,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:emailToPdf.name"
|
data-i18n="tools:emailToPdf.name"
|
||||||
>
|
>
|
||||||
Email to PDF Converter Free Online - Convert EML MSG Files
|
Email to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:emailToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:emailToPdf.subtitle">
|
||||||
Convert email files (EML, MSG) to PDF format. Supports Outlook exports
|
Convert email files (EML, MSG) to PDF format. Supports Outlook exports
|
||||||
|
|||||||
@@ -123,11 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:encryptPdf.name"
|
data-i18n="tools:encryptPdf.name"
|
||||||
>
|
>
|
||||||
Encrypt PDF Free - Password Protect PDFs
|
Encrypt PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:encryptPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:encryptPdf.subtitle">
|
||||||
Protect your PDF with 256-bit AES encryption. Add password protection
|
Lock your PDF by adding a password.
|
||||||
and set usage restrictions.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:epubToPdf.name"
|
data-i18n="tools:epubToPdf.name"
|
||||||
>
|
>
|
||||||
Epub To Pdf Converter Free Online - Convert Files Fast
|
EPUB to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:epubToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:epubToPdf.subtitle">
|
||||||
Convert EPUB e-books to PDF format. Supports multiple files.
|
Convert EPUB e-books to PDF format. Supports multiple files.
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:excelToPdf.name"
|
data-i18n="tools:excelToPdf.name"
|
||||||
>
|
>
|
||||||
Excel to PDF Converter Free - Convert XLSX Online
|
Excel to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:excelToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:excelToPdf.subtitle">
|
||||||
Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format.
|
Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format.
|
||||||
|
|||||||
@@ -134,14 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:extractAttachments.name"
|
data-i18n="tools:extractAttachments.name"
|
||||||
>
|
>
|
||||||
Extract Attachments Free Online - Extract PDF Content
|
Extract Attachments
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:extractAttachments.subtitle"
|
data-i18n="tools:extractAttachments.subtitle"
|
||||||
>
|
>
|
||||||
Upload PDF files to extract all embedded attachments. Files will be
|
Extract all embedded files from PDF(s) as a ZIP.
|
||||||
downloaded as a ZIP archive.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -126,11 +126,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:extractImages.name"
|
data-i18n="tools:extractImages.name"
|
||||||
>
|
>
|
||||||
Extract Images Free Online - Extract PDF Content
|
Extract Images
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:extractImages.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:extractImages.subtitle">
|
||||||
Extract all embedded images from PDF files. Download individually or
|
Extract all embedded images from your PDF files.
|
||||||
as a ZIP archive.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:extractPages.name"
|
data-i18n="tools:extractPages.name"
|
||||||
>
|
>
|
||||||
Extract PDF Pages Free - Copy Pages Online
|
Extract Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:extractPages.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:extractPages.subtitle">
|
||||||
Extract specific pages from a PDF into separate files. Your files will
|
Save a selection of pages as new files.
|
||||||
download in a ZIP archive.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone -->
|
<!-- Drop Zone -->
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:extractTables.name"
|
data-i18n="tools:extractTables.name"
|
||||||
>
|
>
|
||||||
Extract Tables Free Online - Extract PDF Content
|
Extract PDF Tables
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:extractTables.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:extractTables.subtitle">
|
||||||
Extract tables from PDF files and export as CSV, JSON, or Markdown.
|
Extract tables from PDF files and export as CSV, JSON, or Markdown.
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:fb2ToPdf.name"
|
data-i18n="tools:fb2ToPdf.name"
|
||||||
>
|
>
|
||||||
Fb2 To Pdf Converter Free Online - Convert Files Fast
|
FB2 to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:fb2ToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:fb2ToPdf.subtitle">
|
||||||
Convert FictionBook (FB2) e-books to PDF format. Supports multiple
|
Convert FictionBook (FB2) e-books to PDF format. Supports multiple
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:fixPageSize.name"
|
data-i18n="tools:fixPageSize.name"
|
||||||
>
|
>
|
||||||
Fix Page Size Free Online - Fast & Secure
|
Fix Page Size
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:fixPageSize.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:fixPageSize.subtitle">
|
||||||
Standardize all pages in your PDF to a uniform size. Choose from
|
Standardize all pages to a uniform size.
|
||||||
standard sizes or set custom dimensions.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:flattenPdf.name"
|
data-i18n="tools:flattenPdf.name"
|
||||||
>
|
>
|
||||||
Flatten Pdf Free Online - Fast & Secure
|
Flatten PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:flattenPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:flattenPdf.subtitle">
|
||||||
Make form fields and annotations non-editable by flattening them into
|
Make form fields and annotations non-editable.
|
||||||
the PDF.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -119,12 +119,11 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:fontToOutline.name"
|
data-i18n="tools:fontToOutline.name"
|
||||||
>
|
>
|
||||||
Font to Outline Free Online - Convert Fonts to Paths
|
Font to Outline
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:fontToOutline.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:fontToOutline.subtitle">
|
||||||
Convert all fonts in your PDF to vector outlines/paths. Ensures
|
Convert all fonts to vector outlines for consistent rendering across
|
||||||
consistent rendering across all devices regardless of font
|
all devices.
|
||||||
availability.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:createPdfForm.name"
|
data-i18n="tools:createPdfForm.name"
|
||||||
>
|
>
|
||||||
Form Creator Free Online - Fast & Secure
|
Create PDF Form
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:createPdfForm.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:createPdfForm.subtitle">
|
||||||
Upload an existing PDF or create a blank PDF to start adding form
|
Create fillable PDF forms with drag-and-drop text fields.
|
||||||
fields.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -262,8 +261,7 @@
|
|||||||
Create PDF Form
|
Create PDF Form
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:createPdfForm.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:createPdfForm.subtitle">
|
||||||
Drag and drop fields onto the canvas to create a fillable PDF form.
|
Create fillable PDF forms with drag-and-drop text fields.
|
||||||
Customize field properties and download your form.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Main Form Creator Area -->
|
<!-- Main Form Creator Area -->
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfFormFiller.name"
|
data-i18n="tools:pdfFormFiller.name"
|
||||||
>
|
>
|
||||||
Form Filler Free Online - Fast & Secure
|
PDF Form Filler
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-4">
|
<p class="text-gray-400 mb-4">
|
||||||
Upload a PDF with form fields. Fill them directly in the viewer below,
|
Upload a PDF with form fields. Fill them directly in the viewer below,
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:headerFooter.name"
|
data-i18n="tools:headerFooter.name"
|
||||||
>
|
>
|
||||||
Header Footer Free Online - Fast & Secure
|
Header & Footer
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:headerFooter.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:headerFooter.subtitle">
|
||||||
Add customizable headers and footers to your PDF documents with
|
Add text to the top and bottom of pages.
|
||||||
dynamic page numbers.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:heicToPdf.name"
|
data-i18n="tools:heicToPdf.name"
|
||||||
>
|
>
|
||||||
Heic To Pdf Converter Free Online - Convert Files Fast
|
HEIC to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:heicToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:heicToPdf.subtitle">
|
||||||
Convert one or more HEIC (High Efficiency) images from your iPhone or
|
Create a PDF from one or more HEIC images.
|
||||||
camera into a single PDF file.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -121,10 +121,11 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:imageToPdf.name"
|
data-i18n="tools:imageToPdf.name"
|
||||||
>
|
>
|
||||||
Image To Pdf Converter Free Online - Convert Files Fast
|
Images to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:imageToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:imageToPdf.subtitle">
|
||||||
Convert one or more images into a single PDF file.
|
Convert JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX,
|
||||||
|
JP2, PSD, SVG, HEIC, WebP to PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:invertColors.name"
|
data-i18n="tools:invertColors.name"
|
||||||
>
|
>
|
||||||
Invert Colors Free Online - Fast & Secure
|
Invert Colors
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:invertColors.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:invertColors.subtitle">
|
||||||
Invert all colors in your PDF document, creating a negative image
|
Create a "dark mode" version of your PDF.
|
||||||
effect.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:jpgToPdf.name"
|
data-i18n="tools:jpgToPdf.name"
|
||||||
>
|
>
|
||||||
JPG to PDF Converter Free - Convert Images Online
|
JPG to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:jpgToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:jpgToPdf.subtitle">
|
||||||
Create a PDF from JPG, JPEG, and JPEG2000 (JP2/JPX) images.
|
Create a PDF from JPG, JPEG, and JPEG2000 (JP2/JPX) images.
|
||||||
|
|||||||
@@ -112,11 +112,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:jsonToPdf.name"
|
data-i18n="tools:jsonToPdf.name"
|
||||||
>
|
>
|
||||||
Json To Pdf Converter Free Online - Convert Files Fast
|
JSON to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:jsonToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:jsonToPdf.subtitle">
|
||||||
Upload multiple JSON files to convert them all to PDF format. Files
|
Convert JSON files to PDF format.
|
||||||
will be downloaded as a ZIP archive.
|
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6"
|
class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6"
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:linearizePdf.name"
|
data-i18n="tools:linearizePdf.name"
|
||||||
>
|
>
|
||||||
Linearize Pdf Free Online - Fast & Secure
|
Linearize PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:linearizePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:linearizePdf.subtitle">
|
||||||
Optimize PDF files for fast web viewing. Linearized PDFs load
|
Optimize PDF for fast web viewing.
|
||||||
progressively in browsers.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -130,14 +130,14 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:markdownToPdf.name"
|
data-i18n="tools:markdownToPdf.name"
|
||||||
>
|
>
|
||||||
Markdown To Pdf Converter Free Online - Convert Files Fast
|
Markdown to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:markdownToPdf.subtitle"
|
data-i18n="tools:markdownToPdf.subtitle"
|
||||||
>
|
>
|
||||||
Write markdown with live preview. Supports syntax highlighting,
|
Write or paste Markdown and export it as a beautifully formatted
|
||||||
tables, emoji, and more. Print to save as PDF.
|
PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Editor container -->
|
<!-- Editor container -->
|
||||||
|
|||||||
@@ -119,7 +119,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:mergePdf.name"
|
data-i18n="tools:mergePdf.name"
|
||||||
>
|
>
|
||||||
Merge PDF Files Free - Combine PDFs Instantly
|
Merge PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:mergePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:mergePdf.subtitle">
|
||||||
Combine whole files, or select specific pages to merge into a new
|
Combine whole files, or select specific pages to merge into a new
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:mobiToPdf.name"
|
data-i18n="tools:mobiToPdf.name"
|
||||||
>
|
>
|
||||||
Mobi To Pdf Converter Free Online - Convert Files Fast
|
MOBI to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:mobiToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:mobiToPdf.subtitle">
|
||||||
Convert MOBI e-books to PDF format. Supports multiple files.
|
Convert MOBI e-books to PDF format. Supports multiple files.
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:nUpPdf.name"
|
data-i18n="tools:nUpPdf.name"
|
||||||
>
|
>
|
||||||
N Up Pdf Free Online - Fast & Secure
|
N-Up PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:nUpPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:nUpPdf.subtitle">
|
||||||
Arrange multiple pages onto a single sheet. Perfect for printing
|
Arrange multiple pages onto a single sheet.
|
||||||
handouts or saving paper.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -123,11 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:ocrPdf.name"
|
data-i18n="tools:ocrPdf.name"
|
||||||
>
|
>
|
||||||
OCR PDF Free Online - Extract Text from Scans
|
OCR PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:ocrPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:ocrPdf.subtitle">
|
||||||
Convert scanned PDFs into searchable documents. Select one or more
|
Make a PDF searchable and copyable.
|
||||||
languages present in your file for the best results.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- How it works info box -->
|
<!-- How it works info box -->
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:odgToPdf.name"
|
data-i18n="tools:odgToPdf.name"
|
||||||
>
|
>
|
||||||
Odg To Pdf Converter Free Online - Convert Files Fast
|
ODG to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:odgToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:odgToPdf.subtitle">
|
||||||
Convert OpenDocument Graphics (ODG) files to PDF format. Supports
|
Convert OpenDocument Graphics (ODG) files to PDF format. Supports
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:odpToPdf.name"
|
data-i18n="tools:odpToPdf.name"
|
||||||
>
|
>
|
||||||
Odp To Pdf Converter Free Online - Convert Files Fast
|
ODP to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:odpToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:odpToPdf.subtitle">
|
||||||
Convert OpenDocument Presentation (ODP) files to PDF format. Supports
|
Convert OpenDocument Presentation (ODP) files to PDF format. Supports
|
||||||
|
|||||||
@@ -122,7 +122,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:odsToPdf.name"
|
data-i18n="tools:odsToPdf.name"
|
||||||
>
|
>
|
||||||
Ods To Pdf Converter Free Online - Convert Files Fast
|
ODS to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:odsToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:odsToPdf.subtitle">
|
||||||
Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports
|
Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports
|
||||||
|
|||||||
@@ -120,11 +120,11 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:odtToPdf.name"
|
data-i18n="tools:odtToPdf.name"
|
||||||
>
|
>
|
||||||
Odt To Pdf Converter Free Online - Convert Files Fast
|
ODT to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:odtToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:odtToPdf.subtitle">
|
||||||
Convert OpenDocument Text (.odt) files to PDF format. Supports
|
Convert OpenDocument Text files to PDF format. Supports multiple
|
||||||
multiple files.
|
files.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -119,23 +119,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:duplicateOrganize.name"
|
data-i18n="tools:duplicateOrganize.name"
|
||||||
>
|
>
|
||||||
Organize PDF Pages Free - Reorder PDFs Online
|
Duplicate & Organize
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:duplicateOrganize.subtitle"
|
data-i18n="tools:duplicateOrganize.subtitle"
|
||||||
>
|
>
|
||||||
Drag pages to reorder them. Use the
|
Duplicate, reorder, and delete pages.
|
||||||
<i
|
|
||||||
data-lucide="copy-plus"
|
|
||||||
class="inline-block w-4 h-4 mx-1 align-text-bottom text-green-500"
|
|
||||||
></i>
|
|
||||||
icon to duplicate a page or the
|
|
||||||
<i
|
|
||||||
data-lucide="x-circle"
|
|
||||||
class="inline-block w-4 h-4 mx-1 align-text-bottom text-red-400"
|
|
||||||
></i>
|
|
||||||
icon to delete it.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone -->
|
<!-- Drop Zone -->
|
||||||
|
|||||||
@@ -132,11 +132,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pageDimensions.name"
|
data-i18n="tools:pageDimensions.name"
|
||||||
>
|
>
|
||||||
Page Dimensions Free Online - Fast & Secure
|
Page Dimensions
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pageDimensions.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pageDimensions.subtitle">
|
||||||
Analyze PDF page dimensions and sizes. View detailed information about
|
Analyze page size, orientation, and units.
|
||||||
each page.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pageNumbers.name"
|
data-i18n="tools:pageNumbers.name"
|
||||||
>
|
>
|
||||||
Page Numbers Free Online - Fast & Secure
|
Page Numbers
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pageNumbers.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pageNumbers.subtitle">
|
||||||
Add page numbers to your PDF documents with customizable position,
|
Insert page numbers into your document.
|
||||||
format, and styling.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pagesToPdf.name"
|
data-i18n="tools:pagesToPdf.name"
|
||||||
>
|
>
|
||||||
Pages To Pdf Converter Free Online - Convert Files Fast
|
Pages to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pagesToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pagesToPdf.subtitle">
|
||||||
Convert Apple Pages documents to PDF format. Supports multiple files.
|
Convert Apple Pages documents to PDF format. Supports multiple files.
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfBooklet.name"
|
data-i18n="tools:pdfBooklet.name"
|
||||||
>
|
>
|
||||||
Pdf Booklet Free Online - Fast & Secure
|
PDF Booklet
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfBooklet.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfBooklet.subtitle">
|
||||||
Rearrange pages for double-sided booklet printing. Fold and staple to
|
Rearrange pages for double-sided booklet printing. Fold and staple to
|
||||||
|
|||||||
@@ -239,11 +239,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfOcg.name"
|
data-i18n="tools:pdfOcg.name"
|
||||||
>
|
>
|
||||||
Pdf Layers Free Online - Fast & Secure
|
PDF OCG
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfOcg.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfOcg.subtitle">
|
||||||
Manage Optional Content Groups (OCG) in your PDF. View, toggle
|
View, toggle, add, and delete OCG layers in your PDF.
|
||||||
visibility, add new layers, or delete existing ones.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,10 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToBmp.name"
|
data-i18n="tools:pdfToBmp.name"
|
||||||
>
|
>
|
||||||
Pdf To Bmp Converter Free Online - Convert Files Fast
|
PDF to BMP
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToBmp.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToBmp.subtitle">
|
||||||
Convert each page of a PDF file into a BMP image.
|
Convert each PDF page into a BMP image.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToCsv.name"
|
data-i18n="tools:pdfToCsv.name"
|
||||||
>
|
>
|
||||||
Pdf To Csv Converter Free Online - Convert Files Fast
|
PDF to CSV
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToCsv.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToCsv.subtitle">
|
||||||
Extract tables from PDF and convert to CSV format.
|
Extract tables from PDF and convert to CSV format.
|
||||||
|
|||||||
@@ -123,11 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToWord.name"
|
data-i18n="tools:pdfToWord.name"
|
||||||
>
|
>
|
||||||
PDF to Word Converter Free - Convert PDF to DOCX
|
PDF to Word
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToWord.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToWord.subtitle">
|
||||||
Convert PDF files to editable Word documents. Preserves text,
|
Convert PDF files to editable Word documents.
|
||||||
formatting, and layout.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToExcel.name"
|
data-i18n="tools:pdfToExcel.name"
|
||||||
>
|
>
|
||||||
PDF to Excel Converter Free - Extract Tables
|
PDF to Excel
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToExcel.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToExcel.subtitle">
|
||||||
Extract tables from PDF and convert to Excel (XLSX) format.
|
Extract tables from PDF and convert to Excel (XLSX) format.
|
||||||
|
|||||||
@@ -134,10 +134,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToGreyscale.name"
|
data-i18n="tools:pdfToGreyscale.name"
|
||||||
>
|
>
|
||||||
Pdf To Greyscale Converter Free Online - Convert Files Fast
|
PDF to Greyscale
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToGreyscale.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToGreyscale.subtitle">
|
||||||
Convert all colors in a PDF to black and white.
|
Convert all colors to black and white.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -123,10 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToJpg.name"
|
data-i18n="tools:pdfToJpg.name"
|
||||||
>
|
>
|
||||||
PDF to JPG Converter Free - Convert PDF to Images
|
PDF to JPG
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToJpg.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToJpg.subtitle">
|
||||||
Convert each page of a PDF file into a high-quality JPG image.
|
Convert each PDF page into a JPG image.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -112,11 +112,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToJson.name"
|
data-i18n="tools:pdfToJson.name"
|
||||||
>
|
>
|
||||||
Pdf To Json Converter Free Online - Convert Files Fast
|
PDF to JSON
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToJson.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToJson.subtitle">
|
||||||
Upload multiple PDF files to convert them all to JSON format. Files
|
Convert PDF files to JSON format.
|
||||||
will be downloaded as a ZIP archive.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="upload-section mb-6">
|
<div class="upload-section mb-6">
|
||||||
|
|||||||
@@ -132,11 +132,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToMarkdown.name"
|
data-i18n="tools:pdfToMarkdown.name"
|
||||||
>
|
>
|
||||||
Pdf To Markdown Converter Free Online - Convert Files Fast
|
PDF to Markdown
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToMarkdown.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToMarkdown.subtitle">
|
||||||
Convert PDF files to Markdown format. Preserves text structure with
|
Convert PDF text and tables to Markdown format.
|
||||||
optional image embedding.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToPdfa.name"
|
data-i18n="tools:pdfToPdfa.name"
|
||||||
>
|
>
|
||||||
Pdf To Pdfa Converter Free Online - Convert Files Fast
|
PDF to PDF/A
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToPdfa.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToPdfa.subtitle">
|
||||||
Convert your PDF documents to PDF/A format for long-term archiving and
|
Convert PDF to PDF/A for long-term archiving.
|
||||||
preservation.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToPng.name"
|
data-i18n="tools:pdfToPng.name"
|
||||||
>
|
>
|
||||||
PDF to PNG Converter Free - High Quality Images
|
PDF to PNG
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToPng.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToPng.subtitle">
|
||||||
Convert each page of a PDF file into a high-quality PNG image with
|
Convert each PDF page into a PNG image.
|
||||||
transparency support.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToSvg.name"
|
data-i18n="tools:pdfToSvg.name"
|
||||||
>
|
>
|
||||||
Pdf To Svg Converter Free Online - Convert Files Fast
|
PDF to SVG
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToSvg.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToSvg.subtitle">
|
||||||
Convert each page of a PDF file into a scalable vector graphic (SVG)
|
Convert each page of a PDF file into a scalable vector graphic (SVG)
|
||||||
|
|||||||
@@ -120,11 +120,11 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToText.name"
|
data-i18n="tools:pdfToText.name"
|
||||||
>
|
>
|
||||||
PDF to Text Converter Free - Extract Text Online
|
PDF to Text
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-4" data-i18n="tools:pdfToText.subtitle">
|
<p class="text-gray-400 mb-4" data-i18n="tools:pdfToText.subtitle">
|
||||||
Extract all text from PDF files and save as plain text (.txt).
|
Extract text from PDF files and save as plain text (.txt). Supports
|
||||||
Supports multiple files.
|
multiple files.
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
class="bg-amber-900/30 border border-amber-700/50 rounded-lg p-3 mb-6"
|
class="bg-amber-900/30 border border-amber-700/50 rounded-lg p-3 mb-6"
|
||||||
|
|||||||
@@ -118,10 +118,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToTiff.name"
|
data-i18n="tools:pdfToTiff.name"
|
||||||
>
|
>
|
||||||
Pdf To Tiff Converter Free Online - Convert Files Fast
|
PDF to TIFF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToTiff.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToTiff.subtitle">
|
||||||
Convert each page of a PDF file into a TIFF image.
|
Convert each PDF page into a TIFF image.
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
id="drop-zone"
|
id="drop-zone"
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfToWebp.name"
|
data-i18n="tools:pdfToWebp.name"
|
||||||
>
|
>
|
||||||
Pdf To Webp Converter Free Online - Convert Files Fast
|
PDF to WebP
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToWebp.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfToWebp.subtitle">
|
||||||
Convert each page of a PDF file into a modern WebP image format with
|
Convert each PDF page into a WebP image.
|
||||||
smaller file sizes.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pdfsToZip.name"
|
data-i18n="tools:pdfsToZip.name"
|
||||||
>
|
>
|
||||||
Pdf To Zip Converter Free Online - Convert Files Fast
|
PDFs to ZIP
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pdfsToZip.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pdfsToZip.subtitle">
|
||||||
Package multiple PDF files into a single ZIP archive for easy sharing
|
Package multiple PDF files into a ZIP archive.
|
||||||
and storage.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,10 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pngToPdf.name"
|
data-i18n="tools:pngToPdf.name"
|
||||||
>
|
>
|
||||||
PNG to PDF Converter Free - Convert Images Fast
|
PNG to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pngToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pngToPdf.subtitle">
|
||||||
Convert one or more PNG images into a single PDF file.
|
Create a PDF from one or more PNG images.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone -->
|
<!-- Drop Zone -->
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:posterizePdf.name"
|
data-i18n="tools:posterizePdf.name"
|
||||||
>
|
>
|
||||||
Posterize Pdf Free Online - Fast & Secure
|
Posterize PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:posterizePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:posterizePdf.subtitle">
|
||||||
Split pages into multiple smaller sheets to print as a poster.
|
Split a large page into multiple smaller pages.
|
||||||
Navigate the preview and see the grid update based on your settings.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,7 +134,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:powerpointToPdf.name"
|
data-i18n="tools:powerpointToPdf.name"
|
||||||
>
|
>
|
||||||
PowerPoint to PDF Converter - Convert PPT Free
|
PowerPoint to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
|
|||||||
@@ -134,14 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:preparePdfForAi.name"
|
data-i18n="tools:preparePdfForAi.name"
|
||||||
>
|
>
|
||||||
Prepare Pdf For Ai Free Online - Fast & Secure
|
Prepare PDF for AI
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:preparePdfForAi.subtitle"
|
data-i18n="tools:preparePdfForAi.subtitle"
|
||||||
>
|
>
|
||||||
Extract PDF content as LlamaIndex-compatible JSON documents. Perfect
|
Extract PDF content as LlamaIndex JSON for RAG/LLM pipelines.
|
||||||
for RAG pipelines, LangChain, and other LLM frameworks.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:psdToPdf.name"
|
data-i18n="tools:psdToPdf.name"
|
||||||
>
|
>
|
||||||
Psd To Pdf Converter Free Online - Convert Files Fast
|
PSD to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:psdToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:psdToPdf.subtitle">
|
||||||
Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple
|
Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:pubToPdf.name"
|
data-i18n="tools:pubToPdf.name"
|
||||||
>
|
>
|
||||||
Pub To Pdf Converter Free Online - Convert Files Fast
|
PUB to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:pubToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:pubToPdf.subtitle">
|
||||||
Convert Microsoft Publisher (PUB) files to PDF format. Supports
|
Convert Microsoft Publisher (PUB) files to PDF format. Supports
|
||||||
|
|||||||
@@ -120,11 +120,11 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:rasterizePdf.name"
|
data-i18n="tools:rasterizePdf.name"
|
||||||
>
|
>
|
||||||
Rasterize Pdf Free Online - Fast & Secure
|
Rasterize PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:rasterizePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:rasterizePdf.subtitle">
|
||||||
Convert vector graphics and text to images. Useful for flattening
|
Convert PDF to image-based PDF. Flatten layers and remove selectable
|
||||||
layers, removing selectable text, or creating print-ready files.
|
text.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,13 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:removeAnnotations.name"
|
data-i18n="tools:removeAnnotations.name"
|
||||||
>
|
>
|
||||||
Remove Annotations Free Online - Fast & Secure
|
Remove Annotations
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:removeAnnotations.subtitle"
|
data-i18n="tools:removeAnnotations.subtitle"
|
||||||
>
|
>
|
||||||
Remove all comments, highlights, and markup from your PDF document.
|
Strip comments, highlights, and links.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -134,14 +134,13 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:removeBlankPages.name"
|
data-i18n="tools:removeBlankPages.name"
|
||||||
>
|
>
|
||||||
Remove Blank Pages Free Online - Fast & Secure
|
Remove Blank Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:removeBlankPages.subtitle"
|
data-i18n="tools:removeBlankPages.subtitle"
|
||||||
>
|
>
|
||||||
Automatically detect and remove all blank pages from your PDF
|
Automatically detect and delete blank pages.
|
||||||
document.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -132,11 +132,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:removeMetadata.name"
|
data-i18n="tools:removeMetadata.name"
|
||||||
>
|
>
|
||||||
Remove Metadata Free Online - Fast & Secure
|
Remove Metadata
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:removeMetadata.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:removeMetadata.subtitle">
|
||||||
Strip all hidden data from your PDF including author, title, creation
|
Strip hidden data from your PDF.
|
||||||
date, and XMP metadata.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -136,14 +136,14 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:removeRestrictions.name"
|
data-i18n="tools:removeRestrictions.name"
|
||||||
>
|
>
|
||||||
Remove Restrictions Free Online - Fast & Secure
|
Remove Restrictions
|
||||||
</h1>
|
</h1>
|
||||||
<p
|
<p
|
||||||
class="text-gray-400 mb-6"
|
class="text-gray-400 mb-6"
|
||||||
data-i18n="tools:removeRestrictions.subtitle"
|
data-i18n="tools:removeRestrictions.subtitle"
|
||||||
>
|
>
|
||||||
Remove password protection and security restrictions from PDF files.
|
Remove password protection and security restrictions associated with
|
||||||
Make PDFs fully editable and printable.
|
digitally signed PDF files.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:repairPdf.name"
|
data-i18n="tools:repairPdf.name"
|
||||||
>
|
>
|
||||||
Repair Pdf Free Online - Fast & Secure
|
Repair PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:repairPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:repairPdf.subtitle">
|
||||||
Recover data from corrupted or damaged PDF files.
|
Recover data from corrupted or damaged PDF files.
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:reversePages.name"
|
data-i18n="tools:reversePages.name"
|
||||||
>
|
>
|
||||||
Reverse Pages Free Online - Fast & Secure
|
Reverse Pages
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:reversePages.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:reversePages.subtitle">
|
||||||
Flip the order of all pages in your PDF document. The last page
|
Flip the order of all pages in your document.
|
||||||
becomes the first, and so on.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone for PDF Upload -->
|
<!-- Drop Zone for PDF Upload -->
|
||||||
|
|||||||
@@ -119,11 +119,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:rotateCustom.name"
|
data-i18n="tools:rotateCustom.name"
|
||||||
>
|
>
|
||||||
Rotate Custom Free Online - Fast & Secure
|
Rotate by Custom Degrees
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:rotateCustom.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:rotateCustom.subtitle">
|
||||||
Rotate pages by any custom angle. Enter degrees (positive =
|
Rotate pages by any custom angle.
|
||||||
counter-clockwise, negative = clockwise).
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:rotatePdf.name"
|
data-i18n="tools:rotatePdf.name"
|
||||||
>
|
>
|
||||||
Rotate PDF Pages Free - Turn PDFs Online
|
Rotate PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:rotatePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:rotatePdf.subtitle">
|
||||||
Rotate individual pages or all pages at once. Click on page thumbnails
|
Turn pages in 90-degree increments.
|
||||||
to rotate them.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:rtfToPdf.name"
|
data-i18n="tools:rtfToPdf.name"
|
||||||
>
|
>
|
||||||
Rtf To Pdf Converter Free Online - Convert Files Fast
|
RTF to PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:rtfToPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:rtfToPdf.subtitle">
|
||||||
Convert RTF (Rich Text Format) document files to PDF format. Supports
|
Convert Rich Text Format documents to PDF. Supports multiple files.
|
||||||
multiple files.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -120,11 +120,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:sanitizePdf.name"
|
data-i18n="tools:sanitizePdf.name"
|
||||||
>
|
>
|
||||||
Sanitize Pdf Free Online - Fast & Secure
|
Sanitize PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:sanitizePdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:sanitizePdf.subtitle">
|
||||||
Remove sensitive content from PDF files. Clean metadata, JavaScript,
|
Remove metadata, annotations, scripts, and more.
|
||||||
embedded files, and more.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -119,7 +119,7 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:scannerEffect.name"
|
data-i18n="tools:scannerEffect.name"
|
||||||
>
|
>
|
||||||
Scanner Effect Free Online - Make PDFs Look Scanned
|
Scanner Effect
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:scannerEffect.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:scannerEffect.subtitle">
|
||||||
Make your PDF look like a scanned document.
|
Make your PDF look like a scanned document.
|
||||||
|
|||||||
@@ -123,12 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:signPdf.name"
|
data-i18n="tools:signPdf.name"
|
||||||
>
|
>
|
||||||
Sign PDF Free Online - Add Digital Signature
|
Sign PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:signPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:signPdf.subtitle">
|
||||||
Upload a PDF to sign it using the built-in PDF.js viewer. Look for the
|
Draw, type, or upload your signature.
|
||||||
<strong>signature / pen tool</strong> in the toolbar to add your
|
|
||||||
signature.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone -->
|
<!-- Drop Zone -->
|
||||||
|
|||||||
@@ -123,10 +123,10 @@
|
|||||||
class="text-2xl font-bold text-white mb-2"
|
class="text-2xl font-bold text-white mb-2"
|
||||||
data-i18n="tools:splitPdf.name"
|
data-i18n="tools:splitPdf.name"
|
||||||
>
|
>
|
||||||
Split PDF Online Free - Extract Pages Easily
|
Split PDF
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-gray-400 mb-6" data-i18n="tools:splitPdf.subtitle">
|
<p class="text-gray-400 mb-6" data-i18n="tools:splitPdf.subtitle">
|
||||||
Extract pages from a PDF using various methods.
|
Extract a range of pages into a new PDF.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone for Main PDF Upload -->
|
<!-- Drop Zone for Main PDF Upload -->
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user