<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on 130l</title><link>https://joejztang.github.io/tools/</link><description>Recent content in Tools on 130l</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 11 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://joejztang.github.io/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>Compress PDF</title><link>https://joejztang.github.io/tools/compresspdf/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>https://joejztang.github.io/tools/compresspdf/</guid><description>&lt;p&gt;By &lt;a href="https://github.com/OpenToolKit/CompressPDF" class="external-link" target="_blank" rel="noopener"&gt;https://github.com/OpenToolKit/CompressPDF&lt;/a&gt;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
 &lt;meta charset="UTF-8" /&gt;
 &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
 &lt;title&gt;Compress PDF - Smaller PDFs in your browser!&lt;/title&gt;
 &lt;meta name="description"
 content="Free, In-browser, Privacy friendly PDF Compressor. Your files doesn't leave your browser." /&gt;
 &lt;link rel="shortcut icon" type="image/x-icon" href="compresspdf-favicon.ico" /&gt;
 &lt;link rel="icon" type="image/x-icon" href="compresspdf-favicon.ico" /&gt;
 &lt;script defer src="js/pdfkit-standalone-0.10.0.js"&gt;&lt;/script&gt;
 &lt;script defer src="js/blob-stream-0.1.3.js"&gt;&lt;/script&gt;
 &lt;script src="js/pdf.min-2.5.207.js"&gt;&lt;/script&gt;
 &lt;script src="js/FileSaver.min-2.0.4.js"&gt;&lt;/script&gt;
 &lt;script src="js/sortable.min.1.10.2.js"&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
 &lt;style&gt;
 body {
 margin: 0;
 background-color: #fefefe;
 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23ff6347' fill-opacity='0.4' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E");
 }

 #main_container {
 height: 100vh;
 display: flex;
 justify-content: center;
 font-family: Consolas, SFMono-Regular, Liberation Mono, Menlo, monospace;
 }

 #pdf_input_container {
 height: max-content;
 margin: 10px;
 align-self: center;
 }

 #range_container {
 display: inline-block;
 height: max-content;
 align-self: center;
 margin: 10px;
 }

 #compress_pdf_container {
 height: max-content;
 align-self: center;
 margin: 10px;
 }

 #compress_input_output {
 display: inline-block;
 width: 25px;
 max-width: 25px;
 margin-left: 5px;
 margin-right: 5px;
 }

 #compress_pdf {
 border: 1px solid rgba(255, 99, 71, 0.5);
 background: rgba(255, 99, 71, 0.2);
 padding: 5px;
 outline: none;
 animation: none;
 }

 #selected_pdf_container {
 height: max-content;
 margin: 10px;
 align-self: center;
 }

 #pdf_input {
 outline: none;
 font-family: Consolas, SFMono-Regular, Liberation Mono, Menlo, monospace;
 }

 #pdf_input::-webkit-file-upload-button {
 border-radius: 10px;
 border: 1px solid rgba(255, 99, 71, 0.5);
 outline: none;
 background: rgba(255, 99, 71, 0.2);
 font-family: Consolas, SFMono-Regular, Liberation Mono, Menlo, monospace;
 }

 #pdf_input::-webkit-file-upload-button:hover {
 transform: translateY(-0.75px);
 }

 .handle {
 cursor: grab;
 content: url("res/ic_fluent_drag_24_regular.svg");
 vertical-align: middle;
 }

 .list {
 list-style: none;
 width: max-content;
 text-align: center;
 align-content: center;
 }

 .ghost-class {
 background-color: rgba(255, 99, 71, 0.5);
 border-radius: 5px;
 width: max-content;
 }

 @keyframes loading {
 0% {
 border: 2px solid #4285f4;
 color: #4285f4;
 box-shadow: 0px 1px 10px 1px rgba(66, 133, 244, 0.5);
 }

 33% {
 border: 2px solid #db4437;
 color: #db4437;
 box-shadow: 0px 1px 10px 1px rgba(219, 68, 55, 0.5);
 }

 66% {
 border: 2px solid #f4b400;
 color: #f4b400;
 box-shadow: 0px 1px 10px 1px rgba(244, 160, 0, 0.5);
 }

 100% {
 border: 2px solid #0f9d58;
 color: #0f9d58;
 box-shadow: 0px 1px 10px 1px rgba(15, 157, 88, 0.5);
 }
 }

 button {
 border-radius: 15px;
 font-family: Consolas, SFMono-Regular, Liberation Mono, Menlo, monospace;
 }

 button:disabled {
 color: black;
 }

 button:hover {
 box-shadow: 0px 1px 7px 1px rgba(255, 99, 71, 0.25);
 transform: translateY(-0.75px);
 }
 &lt;/style&gt;
 &lt;div id="main_container"&gt;
 &lt;div id="pdf_input_container"&gt;
 &lt;input id="pdf_input" type="file" accept="application/pdf" multiple /&gt;
 &lt;/div&gt;
 &lt;div id="selected_pdf_container"&gt;
 &lt;div id="selected_pdf_list" title="Hold and drag the handle to order the output PDF pages"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div id="range_container"&gt;
 &lt;input id="compress_input" title="Compression Ratio" type="range" min="0" max="1" value="0.5" step="0.1" /&gt;
 &lt;p id="compress_input_output" title="Higher the Value, Better the Compression"&gt;
 0.5
 &lt;/p&gt;</description></item><item><title>Merge PDFs</title><link>https://joejztang.github.io/tools/pdfmerge/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>https://joejztang.github.io/tools/pdfmerge/</guid><description>&lt;p&gt;By &lt;a href="https://github.com/bradsec/pdfmerge" class="external-link" target="_blank" rel="noopener"&gt;https://github.com/bradsec/pdfmerge&lt;/a&gt;&lt;/p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
 &lt;meta charset="UTF-8" /&gt;
 &lt;meta name="description" content="Merge PDF and image files in your browser with no uploads or server processing. Reorder files, add watermarks, and export locally on pdfmerge.me." /&gt;
 &lt;meta name="keywords" content="merge pdf, merge pdf online, merge pdf free, pdf merge, pdf merger, combine pdf, merge pdf files, pdf joiner, pdf combiner, watermark pdf, merge images to pdf, jpg to pdf, png to pdf, image to pdf, online pdf tools, free pdf merger, client-side pdf processing" /&gt;
 &lt;meta name="author" content="BRADSEC" /&gt;
 &lt;meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" /&gt;
 &lt;meta name="language" content="English" /&gt;
 &lt;meta name="viewport" content="width=device-width, initial-scale=1" /&gt;
 &lt;meta name="theme-color" content="#16181c" /&gt;
 
 &lt;!-- Open Graph / Facebook --&gt;
 &lt;meta property="og:type" content="website" /&gt;
 &lt;meta property="og:url" content="https://pdfmerge.me/" /&gt;
 &lt;meta property="og:title" content="PDF Merge | Merge PDFs and Images in Your Browser" /&gt;
 &lt;meta property="og:description" content="Combine PDF and image files locally in your browser, reorder pages, and add watermarks without uploading your files." /&gt;
 &lt;meta property="og:image" content="https://pdfmerge.me/images/ogimage.png" /&gt;
 &lt;meta property="og:image:width" content="1200" /&gt;
 &lt;meta property="og:image:height" content="630" /&gt;
 &lt;meta property="og:image:alt" content="PDF Merge — merge PDF and image files into one PDF in your browser" /&gt;
 &lt;meta property="og:site_name" content="PDFMerge" /&gt;
 &lt;meta property="og:locale" content="en_US" /&gt;
 
 &lt;!-- Twitter --&gt;
 &lt;meta property="twitter:card" content="summary_large_image" /&gt;
 &lt;meta property="twitter:url" content="https://pdfmerge.me/" /&gt;
 &lt;meta property="twitter:title" content="PDF Merge | Merge PDFs and Images in Your Browser" /&gt;
 &lt;meta property="twitter:description" content="Merge PDFs and images locally in your browser with no uploads, no accounts, and no server processing." /&gt;
 &lt;meta property="twitter:image" content="https://pdfmerge.me/images/ogimage.png" /&gt;
 
 &lt;!-- Additional SEO Meta Tags --&gt;
 &lt;meta name="application-name" content="PDFMerge" /&gt;
 &lt;meta name="apple-mobile-web-app-title" content="PDFMerge" /&gt;
 &lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;
 &lt;meta name="apple-mobile-web-app-status-bar-style" content="default" /&gt;
 &lt;meta name="format-detection" content="telephone=no" /&gt;
 &lt;meta name="mobile-web-app-capable" content="yes" /&gt;
 
 &lt;!-- Content Security Policy --&gt;
 &lt;meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: blob:; connect-src 'self' https://cloudflareinsights.com; worker-src 'self' blob:; object-src 'none'; base-uri 'self'; form-action 'self';" /&gt;
 &lt;meta http-equiv="X-Content-Type-Options" content="nosniff" /&gt;
 &lt;meta name="referrer" content="strict-origin-when-cross-origin" /&gt;
 &lt;meta http-equiv="Permissions-Policy" content="geolocation=(), microphone=(), camera=()" /&gt;
 
 &lt;!-- Canonical URL --&gt;
 &lt;link rel="canonical" href="https://pdfmerge.me/" /&gt;
 
 &lt;!-- Favicons --&gt;
 &lt;link rel="apple-touch-icon" sizes="180x180" href="images/apple-touch-icon.png" /&gt;
 &lt;link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png" /&gt;
 &lt;link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png" /&gt;
 &lt;link rel="manifest" href="site.webmanifest" /&gt;
 
 &lt;!-- Optimized Title --&gt;
 &lt;title&gt;PDF Merge | Merge PDFs and Images in Your Browser&lt;/title&gt;

 &lt;!-- Structured data: free browser-based PDF merge tool --&gt;
 &lt;script type="application/ld+json"&gt;
 {
 "@context": "https://schema.org",
 "@type": "WebApplication",
 "name": "PDF Merge",
 "alternateName": "PDFMerge",
 "url": "https://pdfmerge.me/",
 "description": "Free browser-based tool to merge PDF and image files into a single PDF. Reorder pages, add watermarks, and export locally with no uploads or server processing.",
 "applicationCategory": "UtilitiesApplication",
 "operatingSystem": "Any (modern web browser)",
 "browserRequirements": "Requires JavaScript and a modern browser",
 "image": "https://pdfmerge.me/images/android-chrome-512x512.png",
 "inLanguage": "en",
 "isAccessibleForFree": true,
 "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
 "author": { "@type": "Person", "name": "Mark Bradley", "alternateName": "BRADSEC" },
 "featureList": [
 "Merge multiple PDF files into one PDF",
 "Combine images (JPG, PNG) into a PDF",
 "Reorder pages with drag and drop",
 "Add text watermarks",
 "Runs entirely in the browser with no file uploads"
 ]
 }
 &lt;/script&gt;

 &lt;link href="css/reset.css" rel="stylesheet" /&gt;
 &lt;link href="css/styles.css" rel="stylesheet" /&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;div id="spinner" class="spinner"&gt;&lt;/div&gt;
 &lt;div class="wrapper"&gt;
 &lt;header&gt;
 &lt;div class="header-top"&gt;
 &lt;a href="https://pdfmerge.me" class="branding" aria-label="PDFMerge.me" style="text-decoration: none; color: inherit;"&gt;
 &lt;img class="branding-icon" src="images/pdfmerge_icon.png" alt="" aria-hidden="true" /&gt;
 &lt;span class="branding-wordmark"&gt;PDF&lt;span&gt;Merge&lt;/span&gt;&lt;span class="branding-tld"&gt;.me&lt;/span&gt;&lt;/span&gt;
 &lt;/a&gt;
 &lt;button id="theme-switcher" aria-label="Toggle theme" title="Toggle theme" type="button"&gt;
 &lt;span class="icon-light"&gt;&lt;span class="material-icons-outlined"&gt;dark_mode&lt;/span&gt;&lt;/span&gt;
 &lt;span class="icon-dark"&gt;&lt;span class="material-icons-outlined"&gt;light_mode&lt;/span&gt;&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="hero"&gt;
 &lt;div class="hero-eyebrow"&gt;Private browser-based PDF composition&lt;/div&gt;
 &lt;h1&gt;Merge PDFs and images in your browser.&lt;/h1&gt;
 &lt;p&gt;Combine files, reorder pages, add watermarks, and export locally with no uploads, no accounts, and no server processing.&lt;/p&gt;</description></item></channel></rss>