+ {{> footer }}
diff --git a/src/pages/pdf-to-markdown.html b/src/pages/pdf-to-markdown.html
index 045b7492..983e325e 100644
--- a/src/pages/pdf-to-markdown.html
+++ b/src/pages/pdf-to-markdown.html
@@ -108,88 +108,7 @@
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-pdfa.html b/src/pages/pdf-to-pdfa.html
index 83f4b240..da082eab 100644
--- a/src/pages/pdf-to-pdfa.html
+++ b/src/pages/pdf-to-pdfa.html
@@ -96,90 +96,7 @@
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-png.html b/src/pages/pdf-to-png.html
index caef8941..9dbcd49a 100644
--- a/src/pages/pdf-to-png.html
+++ b/src/pages/pdf-to-png.html
@@ -96,101 +96,7 @@
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-svg.html b/src/pages/pdf-to-svg.html
index ffeb5a0a..ea9b852e 100644
--- a/src/pages/pdf-to-svg.html
+++ b/src/pages/pdf-to-svg.html
@@ -96,101 +96,7 @@
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-text.html b/src/pages/pdf-to-text.html
index 3f1f2a5f..ebc50c58 100644
--- a/src/pages/pdf-to-text.html
+++ b/src/pages/pdf-to-text.html
@@ -100,98 +100,7 @@
-
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-tiff.html b/src/pages/pdf-to-tiff.html
index 976bfe69..06761c3c 100644
--- a/src/pages/pdf-to-tiff.html
+++ b/src/pages/pdf-to-tiff.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-webp.html b/src/pages/pdf-to-webp.html
index 06732de6..05ddfb16 100644
--- a/src/pages/pdf-to-webp.html
+++ b/src/pages/pdf-to-webp.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/pdf-to-zip.html b/src/pages/pdf-to-zip.html
index 1ec2c3ba..120eb669 100644
--- a/src/pages/pdf-to-zip.html
+++ b/src/pages/pdf-to-zip.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/png-to-pdf.html b/src/pages/png-to-pdf.html
index 7456054a..a3a95fce 100644
--- a/src/pages/png-to-pdf.html
+++ b/src/pages/png-to-pdf.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/posterize-pdf.html b/src/pages/posterize-pdf.html
index 9dd074c8..17b472de 100644
--- a/src/pages/posterize-pdf.html
+++ b/src/pages/posterize-pdf.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/powerpoint-to-pdf.html b/src/pages/powerpoint-to-pdf.html
index f9e4b433..fe675b13 100644
--- a/src/pages/powerpoint-to-pdf.html
+++ b/src/pages/powerpoint-to-pdf.html
@@ -110,90 +110,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/prepare-pdf-for-ai.html b/src/pages/prepare-pdf-for-ai.html
index 8dc97529..531e2443 100644
--- a/src/pages/prepare-pdf-for-ai.html
+++ b/src/pages/prepare-pdf-for-ai.html
@@ -110,88 +110,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/psd-to-pdf.html b/src/pages/psd-to-pdf.html
index b668c40f..c8564d5c 100644
--- a/src/pages/psd-to-pdf.html
+++ b/src/pages/psd-to-pdf.html
@@ -96,87 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/pub-to-pdf.html b/src/pages/pub-to-pdf.html
index a412283d..25013ac6 100644
--- a/src/pages/pub-to-pdf.html
+++ b/src/pages/pub-to-pdf.html
@@ -96,87 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/rasterize-pdf.html b/src/pages/rasterize-pdf.html
index ac927477..1c21407f 100644
--- a/src/pages/rasterize-pdf.html
+++ b/src/pages/rasterize-pdf.html
@@ -96,88 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/remove-annotations.html b/src/pages/remove-annotations.html
index b8d35725..e6ca01da 100644
--- a/src/pages/remove-annotations.html
+++ b/src/pages/remove-annotations.html
@@ -110,101 +110,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/remove-blank-pages.html b/src/pages/remove-blank-pages.html
index ded2e036..e22bf76a 100644
--- a/src/pages/remove-blank-pages.html
+++ b/src/pages/remove-blank-pages.html
@@ -110,101 +110,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/remove-metadata.html b/src/pages/remove-metadata.html
index a73b8710..0f7fccbe 100644
--- a/src/pages/remove-metadata.html
+++ b/src/pages/remove-metadata.html
@@ -108,98 +108,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/remove-restrictions.html b/src/pages/remove-restrictions.html
index 154ea5a2..1fb1c740 100644
--- a/src/pages/remove-restrictions.html
+++ b/src/pages/remove-restrictions.html
@@ -112,98 +112,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/repair-pdf.html b/src/pages/repair-pdf.html
index f71a265d..28df2142 100644
--- a/src/pages/repair-pdf.html
+++ b/src/pages/repair-pdf.html
@@ -92,106 +92,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/reverse-pages.html b/src/pages/reverse-pages.html
index efa37fc4..b9287299 100644
--- a/src/pages/reverse-pages.html
+++ b/src/pages/reverse-pages.html
@@ -96,106 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/rotate-custom.html b/src/pages/rotate-custom.html
index 44478b1c..769ea99b 100644
--- a/src/pages/rotate-custom.html
+++ b/src/pages/rotate-custom.html
@@ -95,85 +95,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/rotate-pdf.html b/src/pages/rotate-pdf.html
index 5df7395c..f8654932 100644
--- a/src/pages/rotate-pdf.html
+++ b/src/pages/rotate-pdf.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/rtf-to-pdf.html b/src/pages/rtf-to-pdf.html
index bef81dfe..82af074a 100644
--- a/src/pages/rtf-to-pdf.html
+++ b/src/pages/rtf-to-pdf.html
@@ -96,90 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/sanitize-pdf.html b/src/pages/sanitize-pdf.html
index 34c39f0c..f8569520 100644
--- a/src/pages/sanitize-pdf.html
+++ b/src/pages/sanitize-pdf.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/sign-pdf.html b/src/pages/sign-pdf.html
index c07dd238..996d8d25 100644
--- a/src/pages/sign-pdf.html
+++ b/src/pages/sign-pdf.html
@@ -99,90 +99,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/split-pdf.html b/src/pages/split-pdf.html
index 0ebcc83c..19dd5c37 100644
--- a/src/pages/split-pdf.html
+++ b/src/pages/split-pdf.html
@@ -99,106 +99,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/svg-to-pdf.html b/src/pages/svg-to-pdf.html
index 10c645a9..806bee90 100644
--- a/src/pages/svg-to-pdf.html
+++ b/src/pages/svg-to-pdf.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/table-of-contents.html b/src/pages/table-of-contents.html
index 895bbaa5..766403c1 100644
--- a/src/pages/table-of-contents.html
+++ b/src/pages/table-of-contents.html
@@ -106,106 +106,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/text-color.html b/src/pages/text-color.html
index f986988c..e81b8e04 100644
--- a/src/pages/text-color.html
+++ b/src/pages/text-color.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/tiff-to-pdf.html b/src/pages/tiff-to-pdf.html
index 36d0d9d9..d79bb8fd 100644
--- a/src/pages/tiff-to-pdf.html
+++ b/src/pages/tiff-to-pdf.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/txt-to-pdf.html b/src/pages/txt-to-pdf.html
index ce93fb70..d23fdda4 100644
--- a/src/pages/txt-to-pdf.html
+++ b/src/pages/txt-to-pdf.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/validate-signature-pdf.html b/src/pages/validate-signature-pdf.html
index 72dfb319..b5961ae1 100644
--- a/src/pages/validate-signature-pdf.html
+++ b/src/pages/validate-signature-pdf.html
@@ -97,90 +97,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/view-metadata.html b/src/pages/view-metadata.html
index c4bbc790..3703911a 100644
--- a/src/pages/view-metadata.html
+++ b/src/pages/view-metadata.html
@@ -96,98 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/vsd-to-pdf.html b/src/pages/vsd-to-pdf.html
index 80fc5282..d393bb91 100644
--- a/src/pages/vsd-to-pdf.html
+++ b/src/pages/vsd-to-pdf.html
@@ -96,87 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/webp-to-pdf.html b/src/pages/webp-to-pdf.html
index 01fd9e4e..2194f2c6 100644
--- a/src/pages/webp-to-pdf.html
+++ b/src/pages/webp-to-pdf.html
@@ -96,101 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/word-to-pdf.html b/src/pages/word-to-pdf.html
index 4679cb36..705624a8 100644
--- a/src/pages/word-to-pdf.html
+++ b/src/pages/word-to-pdf.html
@@ -99,90 +99,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/wpd-to-pdf.html b/src/pages/wpd-to-pdf.html
index 5943668b..5b50e2a3 100644
--- a/src/pages/wpd-to-pdf.html
+++ b/src/pages/wpd-to-pdf.html
@@ -96,90 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/wps-to-pdf.html b/src/pages/wps-to-pdf.html
index 445c142b..d42383e4 100644
--- a/src/pages/wps-to-pdf.html
+++ b/src/pages/wps-to-pdf.html
@@ -96,90 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/xml-to-pdf.html b/src/pages/xml-to-pdf.html
index f9af852d..7c5cd4c3 100644
--- a/src/pages/xml-to-pdf.html
+++ b/src/pages/xml-to-pdf.html
@@ -96,90 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/pages/xps-to-pdf.html b/src/pages/xps-to-pdf.html
index 6ec85169..ebd92e8b 100644
--- a/src/pages/xps-to-pdf.html
+++ b/src/pages/xps-to-pdf.html
@@ -96,90 +96,7 @@
-
+ {{> navbar }}
-
+ {{> footer }}
diff --git a/src/partials/footer.html b/src/partials/footer.html
new file mode 100644
index 00000000..213b3b70
--- /dev/null
+++ b/src/partials/footer.html
@@ -0,0 +1,163 @@
+
diff --git a/src/partials/navbar.html b/src/partials/navbar.html
new file mode 100644
index 00000000..c19a5b49
--- /dev/null
+++ b/src/partials/navbar.html
@@ -0,0 +1,154 @@
+
diff --git a/vite.config.ts b/vite.config.ts
index cd5eccc7..b54c10aa 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -3,6 +3,7 @@ import tailwindcss from '@tailwindcss/vite';
import { nodePolyfills } from 'vite-plugin-node-polyfills';
import { viteStaticCopy } from 'vite-plugin-static-copy';
import viteCompression from 'vite-plugin-compression';
+import handlebars from 'vite-plugin-handlebars';
import { resolve } from 'path';
import fs from 'fs';
import { constants as zlibConstants } from 'zlib';
@@ -14,7 +15,9 @@ function pagesRewritePlugin(): Plugin {
server.middlewares.use((req, res, next) => {
const url = req.url?.split('?')[0] || '';
- const langMatch = url.match(/^\/(en|de|zh|zh-TW|vi|it|id|tr|fr)(\/.*)?$/);
+ const langMatch = url.match(
+ /^\/(en|de|zh|zh-TW|vi|it|id|tr|fr)(\/.*)?$/
+ );
if (langMatch) {
const lang = langMatch[1];
const restOfPath = langMatch[2] || '/';
@@ -176,6 +179,9 @@ export default defineConfig(({ mode }) => {
return {
base: (process.env.BASE_URL || '/').replace(/\/?$/, '/'),
plugins: [
+ handlebars({
+ partialDirectory: resolve(__dirname, 'src/partials'),
+ }),
pagesRewritePlugin(),
flattenPagesPlugin(),
rewriteHtmlPathsPlugin(),