Files
bentopdf/src/pages/crop-pdf.html
T
2026-09-04 16:26:08 +05:30

568 lines
20 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Primary Meta Tags -->
<meta
name="title"
content="Crop PDF Online Free - Trim Margins and Resize Pages | BentoPDF"
/>
<meta
name="description"
content="Trim the margins of every page in your PDF. Free, no uploads, no signup. Runs entirely in your browser."
/>
<meta name="keywords" content="crop pdf, online pdf" />
<meta name="author" content="BentoPDF" />
<meta
name="robots"
content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"
/>
<!-- Canonical URL -->
<link rel="canonical" href="https://www.bentopdf.com/crop-pdf" />
<!-- Open Graph / Facebook / LinkedIn -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.bentopdf.com/crop-pdf" />
<meta
property="og:title"
content="Crop PDF Online Free - Trim Margins and Resize Pages | BentoPDF"
/>
<meta
property="og:description"
content="Trim the margins of every page in your PDF. Free, no uploads, no signup. Runs entirely in your browser."
/>
<meta
property="og:image"
content="https://www.bentopdf.com/images/og-crop-pdf.png"
/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="BentoPDF" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:url" content="https://www.bentopdf.com/crop-pdf" />
<meta
name="twitter:title"
content="Crop PDF Online Free - Trim Margins and Resize Pages | BentoPDF"
/>
<meta
name="twitter:description"
content="Trim the margins of every page in your PDF. Free, no uploads, no signup. Runs entirely in your browser."
/>
<meta
name="twitter:image"
content="https://www.bentopdf.com/images/twitter-crop-pdf.png"
/>
<meta name="twitter:site" content="@BentoPDF" />
<!-- Mobile Web App -->
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-title" content="Crop PDF" />
<title>
Crop PDF Online Free - Trim Margins and Resize Pages | BentoPDF
</title>
<link href="/src/css/styles.css" rel="stylesheet" />
<link
href="../../node_modules/cropperjs/dist/cropper.min.css"
rel="stylesheet"
/>
<!-- Web App Manifest -->
<link rel="manifest" href="/site.webmanifest" />
<!-- Favicons -->
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link
rel="icon"
type="image/png"
sizes="192x192"
href="/images/favicon-192x192.png"
/>
<link
rel="icon"
type="image/png"
sizes="512x512"
href="/images/favicon-512x512.png"
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/apple-touch-icon.png"
/>
<link rel="icon" href="/favicon.ico" sizes="32x32" />
</head>
<body class="antialiased bg-gray-900">
{{> navbar }}
<div
id="uploader"
class="min-h-screen flex flex-col items-center justify-start py-12 p-4 bg-gray-900"
>
<div
id="tool-uploader"
class="bg-gray-800 rounded-xl shadow-xl px-4 py-8 md:p-8 max-w-2xl w-full text-gray-200 border border-gray-700"
>
<button
id="back-to-tools"
class="flex items-center gap-2 text-indigo-300 hover:text-indigo-400 mb-6 font-semibold"
>
<i data-lucide="arrow-left" class="cursor-pointer"></i>
<span class="cursor-pointer" data-i18n="tools.backToTools">
Back to Tools
</span>
</button>
<h1
class="text-2xl font-bold text-white mb-2"
data-i18n="tools:cropPdf.name"
>
Crop PDF
</h1>
<p class="text-gray-400 mb-6" data-i18n="tools:cropPdf.subtitle">
Trim the margins of every page in your PDF.
</p>
<!-- Drop Zone -->
<div
id="drop-zone"
class="relative flex flex-col items-center justify-center w-full h-48 md:h-64 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-900 hover:bg-gray-700 transition-colors duration-300"
>
<div class="flex flex-col items-center justify-center pt-5 pb-6">
<i class="ph ph-upload-simple text-4xl mb-3 text-gray-400"></i>
<p class="mb-2 text-sm text-gray-400">
<span class="font-semibold" data-i18n="upload.clickToSelect"
>Click to select a file</span
>
<span data-i18n="upload.orDragAndDrop">or drag and drop</span>
</p>
<p
class="text-xs text-gray-500"
data-i18n="upload.hints.pdfDocuments"
>
PDF Documents
</p>
<p class="text-xs text-gray-500" data-i18n="upload.filesNeverLeave">
Your files never leave your device.
</p>
</div>
<input
id="file-input"
type="file"
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
accept="application/pdf"
/>
</div>
<!-- File Display -->
<div id="file-display-area" class="mt-4 space-y-2"></div>
</div>
<!-- Cropper Editor (shown after file upload) -->
<div id="cropper-editor" class="hidden w-full max-w-6xl mt-6">
<!-- Page Navigation and Controls -->
<div
class="flex flex-col md:flex-row items-center justify-between gap-4 mb-4 p-3 bg-gray-800 rounded-lg border border-gray-700"
>
<div id="page-nav" class="flex items-center gap-2">
<button
id="prev-page"
class="btn p-2 rounded-full bg-gray-700 hover:bg-gray-600"
title="Previous Page"
disabled
>
<i data-lucide="chevron-left" class="w-5 h-5"></i>
</button>
<span id="page-info" class="text-white font-medium px-2"
>Page 1 of 1</span
>
<button
id="next-page"
class="btn p-2 rounded-full bg-gray-700 hover:bg-gray-600"
title="Next Page"
disabled
>
<i data-lucide="chevron-right" class="w-5 h-5"></i>
</button>
</div>
<div class="flex flex-col md:flex-row gap-4">
<label
class="flex items-center gap-2 text-sm font-medium text-gray-300 cursor-pointer"
>
<input
type="checkbox"
id="destructive-crop-toggle"
class="w-4 h-4 rounded text-indigo-600 bg-gray-700 border-gray-600 focus:ring-indigo-500"
/>
Flattening Crop (converts pages to images)
</label>
<label
class="flex items-center gap-2 text-sm font-medium text-gray-300 cursor-pointer"
>
<input
type="checkbox"
id="apply-to-all-toggle"
class="w-4 h-4 rounded text-indigo-600 bg-gray-700 border-gray-600 focus:ring-indigo-500"
/>
Apply to all pages
</label>
</div>
</div>
<!-- Cropper Container -->
<div
id="cropper-container"
class="w-full relative overflow-hidden flex items-center justify-center bg-gray-900 rounded-lg border border-gray-600 min-h-[500px]"
></div>
<!-- Options -->
<button id="crop-button" class="btn-gradient w-full mt-6" disabled>
Crop & Download
</button>
</div>
</div>
<!-- Loader Modal -->
<div
id="loader-modal"
class="hidden fixed inset-0 bg-black bg-opacity-75 flex items-center justify-center z-50"
>
<div
class="bg-gray-800 p-8 rounded-lg flex flex-col items-center gap-4 border border-gray-700 shadow-xl"
>
<div class="solid-spinner"></div>
<p id="loader-text" class="text-white text-lg font-medium">
Processing...
</p>
</div>
</div>
<!-- Alert Modal -->
<div
id="alert-modal"
class="fixed inset-0 bg-gray-900 bg-opacity-90 flex items-center justify-center z-50 hidden"
>
<div
class="bg-gray-800 rounded-lg shadow-xl p-6 max-w-sm w-full border border-gray-700"
>
<h3
id="alert-title"
class="text-xl font-bold text-white mb-2"
data-i18n="alert.title"
data-i18n="alert.title"
>
Alert
</h3>
<p id="alert-message" class="text-gray-300 mb-6"></p>
<button
id="alert-ok"
class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-2 px-4 rounded-lg transition-colors duration-200"
>
OK
</button>
</div>
</div>
<!-- How It Works Section -->
<section class="max-w-4xl mx-auto px-4 py-12">
<h2
class="text-2xl md:text-3xl font-bold text-white mb-8 text-center"
data-i18n="howItWorks.title"
>
How It Works
</h2>
<div class="space-y-6">
<div class="flex items-start gap-4">
<div
class="flex-shrink-0 w-10 h-10 bg-indigo-600 rounded-full flex items-center justify-center text-white font-bold"
>
1
</div>
<div class="flex-1">
<h3 class="text-lg font-semibold text-white mb-1">Upload File</h3>
<p class="text-gray-400" data-i18n="howItWorks.step1">
Click or drag and drop your file to begin
</p>
</div>
</div>
<div class="flex items-start gap-4">
<div
class="flex-shrink-0 w-10 h-10 bg-indigo-600 rounded-full flex items-center justify-center text-white font-bold"
>
2
</div>
<div class="flex-1">
<h3 class="text-lg font-semibold text-white mb-1">Process</h3>
<p class="text-gray-400" data-i18n="howItWorks.step2">
Click the process button to start
</p>
</div>
</div>
<div class="flex items-start gap-4">
<div
class="flex-shrink-0 w-10 h-10 bg-indigo-600 rounded-full flex items-center justify-center text-white font-bold"
>
3
</div>
<div class="flex-1">
<h3 class="text-lg font-semibold text-white mb-1">Download</h3>
<p class="text-gray-400" data-i18n="howItWorks.step3">
Save your processed file instantly
</p>
</div>
</div>
</div>
</section>
<!-- Related Tools Section -->
<section class="max-w-6xl mx-auto px-4 py-12">
<h2
class="text-2xl md:text-3xl font-bold text-white mb-6 text-center"
data-i18n="relatedTools.title"
>
Related PDF Tools
</h2>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4">
<a
href="merge-pdf.html"
class="block bg-gray-800 p-4 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"
>
<h3 class="text-white font-semibold mb-1">Merge PDF</h3>
<p class="text-gray-400 text-sm">Free online merge PDF tool</p>
</a>
<a
href="compress-pdf.html"
class="block bg-gray-800 p-4 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"
>
<h3 class="text-white font-semibold mb-1">Compress PDF</h3>
<p class="text-gray-400 text-sm">Free online compress PDF tool</p>
</a>
<a
href="split-pdf.html"
class="block bg-gray-800 p-4 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"
>
<h3 class="text-white font-semibold mb-1">Split PDF</h3>
<p class="text-gray-400 text-sm">Free online split PDF tool</p>
</a>
<a
href="edit-pdf.html"
class="block bg-gray-800 p-4 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"
>
<h3 class="text-white font-semibold mb-1">Edit PDF</h3>
<p class="text-gray-400 text-sm">Free online edit PDF tool</p>
</a>
<a
href="rotate-pdf.html"
class="block bg-gray-800 p-4 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"
>
<h3 class="text-white font-semibold mb-1">Rotate PDF</h3>
<p class="text-gray-400 text-sm">Free online rotate PDF tool</p>
</a>
</div>
</section>
<!-- FAQ Section -->
<section class="max-w-4xl mx-auto px-4 py-12">
<h2
class="text-2xl md:text-3xl font-bold text-white mb-6 text-center"
data-i18n="faq.sectionTitle"
>
Frequently Asked Questions
</h2>
<div class="faq-list">
<details class="faq-d">
<summary class="faq-d-q">
Does cropping permanently delete the part of the page outside the
box?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
Not in the default mode. The tool sets each page's crop box, so
viewers and printers show only the selected area while the full page
content stays in the file and can be restored by resetting the crop
box in a PDF editor. Turn on Flattening Crop if the trimmed area has
to be gone for good, for example before sharing an excerpt.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Will my text still be selectable after cropping?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
In the default mode, yes: nothing is re-rendered, so text, links,
and vector graphics stay exactly as they were. Flattening Crop
renders each cropped page as an image, which removes selectable text
and usually makes the file larger.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Can I crop different pages by different amounts?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
Yes. Use the page navigation to move through the document and draw a
separate box on each page; the tool remembers every box you set, and
pages you never drew on keep their original size. To use one box
everywhere, check Apply to all pages and the box on the current page
is copied to every page.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
What page size will the cropped PDF have?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
Each cropped page takes on the size of its box, so trimming a 1-inch
margin from every side of a Letter page leaves a 6.5 x 9 inch page.
If you need a standard size like A4 or Letter afterward, run the
result through
<a
href="/fix-page-size"
class="text-indigo-300 hover:text-indigo-400"
>Fix Page Size</a
>.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Is there a way to type exact crop measurements?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
No. Cropping is done by dragging the corners or edges of the overlay
on the page preview; there's no numeric input for margins or
dimensions in this tool. Zooming the browser in helps when a margin
is only a few millimeters wide.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Does cropping reduce image quality or file size?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
The default mode changes neither: the content is untouched, so
quality is identical, and the file stays about the same size because
the hidden margin data is still inside. Flattening Crop replaces
cropped pages with images, which typically makes the file bigger
rather than smaller.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Is my document uploaded while I crop it?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
No. The page previews are rendered in your browser and the crop is
applied locally, so the file never leaves your computer; the cropped
copy is saved under the original file name.
</p>
</details>
<details class="faq-d">
<summary class="faq-d-q">
Can I crop a scanned PDF to remove black edges?
<i data-lucide="plus" class="faq-d-icon"></i>
</summary>
<p class="faq-d-a">
Yes. Draw the box inside the dark border on each page, or set it
once and use Apply to all pages if every scan has the same border.
Because the default crop only hides the edges, use Flattening Crop
if the border must be physically removed, and straighten tilted
scans first with
<a href="/deskew-pdf" class="text-indigo-300 hover:text-indigo-400"
>Deskew PDF</a
>.
</p>
</details>
</div>
</section>
{{> footer }}
<script type="module" src="/src/js/utils/lucide-init.ts"></script>
<script type="module" src="/src/js/utils/full-width.ts"></script>
<script type="module" src="/src/js/utils/simple-mode-footer.ts"></script>
<script type="module" src="/src/js/logic/crop-pdf-page.ts"></script>
<script type="module" src="/src/js/mobileMenu.ts"></script>
<script type="module" src="/src/js/main.ts"></script>
<!-- JSON-LD Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Crop PDF - BentoPDF",
"applicationCategory": "PDF Tool",
"operatingSystem": "Any - Web Browser",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to crop pdf online",
"description": "Learn how to crop pdf using BentoPDF",
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Upload File",
"text": "Click or drag and drop your file"
},
{
"@type": "HowToStep",
"position": 2,
"name": "Process",
"text": "Click the process button"
},
{
"@type": "HowToStep",
"position": 3,
"name": "Download",
"text": "Download your processed file"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.bentopdf.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Crop PDF",
"item": "https://www.bentopdf.com/crop-pdf"
}
]
}
</script>
</body>
</html>