Merge branch 'main' into feat/add-vietnamese-language

This commit is contained in:
Tuyn Doan
2025-12-12 08:48:47 +07:00
committed by GitHub
71 changed files with 128 additions and 95 deletions

View File

@@ -1,3 +1,7 @@
# Global variable declaration:
# Build to serve under Subdirectory BASE_URL if provided, eg: "ARG BASE_URL=/pdf/", otherwise leave blank: "ARG BASE_URL="
ARG BASE_URL=
# Build stage # Build stage
FROM node:20-alpine AS builder FROM node:20-alpine AS builder
WORKDIR /app WORKDIR /app
@@ -6,83 +10,31 @@ RUN npm ci
COPY . . COPY . .
# Build without type checking (vite build only) # Build without type checking (vite build only)
# Pass SIMPLE_MODE and BASE_URL environment variables if provided # Pass SIMPLE_MODE environment variable if provided
ARG SIMPLE_MODE=false ARG SIMPLE_MODE=false
ARG BASE_URL=/
ENV SIMPLE_MODE=$SIMPLE_MODE ENV SIMPLE_MODE=$SIMPLE_MODE
# global arg to local arg
ARG BASE_URL
ENV BASE_URL=$BASE_URL ENV BASE_URL=$BASE_URL
RUN npm run build -- --mode production
RUN if [ -z "$BASE_URL" ]; then \
npm run build -- --mode production; \
else \
npm run build -- --base=${BASE_URL} --mode production; \
fi
# Production stage # Production stage
FROM nginxinc/nginx-unprivileged:stable-alpine-slim FROM nginxinc/nginx-unprivileged:stable-alpine-slim
LABEL org.opencontainers.image.source="https://github.com/alam00000/bentopdf" LABEL org.opencontainers.image.source="https://github.com/alam00000/bentopdf"
ARG BASE_URL=/ # global arg to local arg
ENV BASE_URL=$BASE_URL ARG BASE_URL
# Switch to root to create directories and copy files (dont worry guys, its not a security issue as we switch it only for the duration of the build and its needed to create the destination directory based on BASE_URL)
USER root
COPY --chown=nginx:nginx --from=builder /app/dist /usr/share/nginx/html${BASE_URL%/}
COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf
RUN set -e; \
SUBDIR=$(echo "${BASE_URL}" | sed 's:^/::; s:/$::'); \
if [ -z "${SUBDIR}" ] || [ "${SUBDIR}" = "/" ]; then \
DEST_DIR="/usr/share/nginx/html"; \
else \
DEST_DIR="/usr/share/nginx/html/${SUBDIR}"; \
mkdir -p "${DEST_DIR}"; \
fi; \
chown -R nginx:nginx /usr/share/nginx/html; \
echo "Destination directory: ${DEST_DIR}"
COPY --chown=nginx:nginx --from=builder /app/dist /tmp/dist
RUN set -e; \
SUBDIR=$(echo "${BASE_URL}" | sed 's:^/::; s:/$::'); \
if [ -z "${SUBDIR}" ] || [ "${SUBDIR}" = "/" ]; then \
DEST_DIR="/usr/share/nginx/html"; \
else \
DEST_DIR="/usr/share/nginx/html/${SUBDIR}"; \
fi; \
cp -r /tmp/dist/* "${DEST_DIR}/"; \
rm -rf /tmp/dist; \
chown -R nginx:nginx /usr/share/nginx/html; \
echo "Files copied to: ${DEST_DIR}"; \
ls -la "${DEST_DIR}" | head -20
RUN mkdir -p /etc/nginx/tmp && chown -R nginx:nginx /etc/nginx/tmp RUN mkdir -p /etc/nginx/tmp && chown -R nginx:nginx /etc/nginx/tmp
USER nginx
EXPOSE 8080 EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]
# Old Dockerfile for Root User
# # Build stage
# FROM node:20-alpine AS builder
# WORKDIR /app
# COPY package*.json ./
# RUN npm ci
# COPY . .
# # Build without type checking (vite build only)
# # Pass SIMPLE_MODE environment variable if provided
# ARG SIMPLE_MODE=false
# ENV SIMPLE_MODE=$SIMPLE_MODE
# RUN npm run build -- --mode production
# # Production stage
# FROM nginx:alpine
# COPY --from=builder /app/dist /usr/share/nginx/html
# COPY nginx.conf /etc/nginx/nginx.conf
# EXPOSE 8080
# CMD ["nginx", "-g", "daemon off;"]

View File

@@ -327,7 +327,9 @@ docker build \
docker run -p 3000:8080 bentopdf-simple docker run -p 3000:8080 bentopdf-simple
``` ```
> **Important**: Always include trailing slashes in `BASE_URL` (e.g., `/bentopdf/` not `/bentopdf`). The default value is `/` for root deployment. > **Important**:
> - Always include trailing slashes in `BASE_URL` (e.g., `/bentopdf/` not `/bentopdf`)
> - The default value is `/` for root deployment
### 🚀 Run with Docker Compose (Recommended) ### 🚀 Run with Docker Compose (Recommended)

View File

@@ -5,6 +5,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>About Bentopdf - Fast, Private, and Free PDF Tools</title> <title>About Bentopdf - Fast, Private, and Free PDF Tools</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/about.html" /> <link rel="alternate" hreflang="en" href="/en/about.html" />
<link rel="alternate" hreflang="de" href="/de/about.html" /> <link rel="alternate" hreflang="de" href="/de/about.html" />
<link rel="alternate" hreflang="vi" href="/vi/about.html" /> <link rel="alternate" hreflang="vi" href="/vi/about.html" />
@@ -17,10 +21,7 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <img src="images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>

View File

@@ -5,6 +5,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contact Us - BentoPDF</title> <title>Contact Us - BentoPDF</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/contact.html" /> <link rel="alternate" hreflang="en" href="/en/contact.html" />
<link rel="alternate" hreflang="de" href="/de/contact.html" /> <link rel="alternate" hreflang="de" href="/de/contact.html" />
<link rel="alternate" hreflang="vi" href="/vi/contact.html" /> <link rel="alternate" hreflang="vi" href="/vi/contact.html" />
@@ -17,10 +21,7 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <img src="images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>

View File

@@ -5,6 +5,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Frequently Asked Questions - BentoPDF</title> <title>Frequently Asked Questions - BentoPDF</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
</head> </head>
@@ -13,10 +17,7 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <img src="images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>
@@ -318,6 +319,7 @@
<script type="module" src="src/js/utils/lucide-init.ts"></script> <script type="module" src="src/js/utils/lucide-init.ts"></script>
<script type="module" src="src/version.ts"></script> <script type="module" src="src/version.ts"></script>
<script type="module" src="src/js/mobileMenu.ts"></script> <script type="module" src="src/js/mobileMenu.ts"></script>
<script type="module" src="src/js/main.ts"></script>
</body> </body>
</html> </html>

View File

@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BentoPDF - The Privacy First PDF Toolkit</title> <title>BentoPDF - The Privacy First PDF Toolkit</title>
<!-- i18n: hreflang tags for SEO --> <!-- i18n: hreflang tags for SEO -->
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/" /> <link rel="alternate" hreflang="en" href="/en/" />
<link rel="alternate" hreflang="de" href="/de/" /> <link rel="alternate" hreflang="de" href="/de/" />
<link rel="alternate" hreflang="vi" href="/vi/" /> <link rel="alternate" hreflang="vi" href="/vi/" />

View File

@@ -5,6 +5,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Licensing - BentoPDF</title> <title>Licensing - BentoPDF</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/licensing.html" /> <link rel="alternate" hreflang="en" href="/en/licensing.html" />
<link rel="alternate" hreflang="de" href="/de/licensing.html" /> <link rel="alternate" hreflang="de" href="/de/licensing.html" />
<link rel="alternate" hreflang="vi" href="/vi/licensing.html" /> <link rel="alternate" hreflang="vi" href="/vi/licensing.html" />
@@ -17,10 +21,7 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <img src="images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>

View File

@@ -22,6 +22,8 @@ http {
server_name localhost; server_name localhost;
root /usr/share/nginx/html; root /usr/share/nginx/html;
index index.html; index index.html;
rewrite ^/(en|de)/(.*)$ /$2 last;
location / { location / {
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;

View File

@@ -5,6 +5,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Privacy Policy - BentoPDF</title> <title>Privacy Policy - BentoPDF</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
</head> </head>
@@ -13,10 +17,7 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <img src="images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>
@@ -277,6 +278,7 @@
<script type="module" src="src/js/utils/lucide-init.ts"></script> <script type="module" src="src/js/utils/lucide-init.ts"></script>
<script type="module" src="src/version.ts"></script> <script type="module" src="src/version.ts"></script>
<script type="module" src="src/js/mobileMenu.ts"></script> <script type="module" src="src/js/mobileMenu.ts"></script>
<script type="module" src="src/js/main.ts"></script>
</body> </body>
</html> </html>

View File

@@ -47,6 +47,14 @@
"created_at": "2025-12-10T08:11:40Z", "created_at": "2025-12-10T08:11:40Z",
"repoId": 1074785178, "repoId": 1074785178,
"pullRequestNo": 242 "pullRequestNo": 242
},
{
"name": "tuyndoan",
"id": 137283898,
"comment_id": 3643164805,
"created_at": "2025-12-11T18:05:46Z",
"repoId": 1074785178,
"pullRequestNo": 252
} }
] ]
} }

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/add-attachments.html" /> <link rel="alternate" hreflang="en" href="/en/add-attachments.html" />
<link rel="alternate" hreflang="de" href="/de/add-attachments.html" /> <link rel="alternate" hreflang="de" href="/de/add-attachments.html" />
<link rel="alternate" hreflang="vi" href="/vi/add-attachments.html" /> <link rel="alternate" hreflang="vi" href="/vi/add-attachments.html" />

View File

@@ -15,6 +15,7 @@
<link rel="alternate" hreflang="vi" href="/vi/add-blank-page.html" /> <link rel="alternate" hreflang="vi" href="/vi/add-blank-page.html" />
<link rel="alternate" hreflang="x-default" href="/en/add-blank-page.html" /> <link rel="alternate" hreflang="x-default" href="/en/add-blank-page.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/add-watermark.html" /> <link rel="alternate" hreflang="vi" href="/vi/add-watermark.html" />
<link rel="alternate" hreflang="x-default" href="/en/add-watermark.html" /> <link rel="alternate" hreflang="x-default" href="/en/add-watermark.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/alternate-merge.html" /> <link rel="alternate" hreflang="en" href="/en/alternate-merge.html" />
<link rel="alternate" hreflang="de" href="/de/alternate-merge.html" /> <link rel="alternate" hreflang="de" href="/de/alternate-merge.html" />
<link rel="alternate" hreflang="vi" href="/vi/alternate-merge.html" /> <link rel="alternate" hreflang="vi" href="/vi/alternate-merge.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/background-color.html" /> <link rel="alternate" hreflang="vi" href="/vi/background-color.html" />
<link rel="alternate" hreflang="x-default" href="/en/background-color.html" /> <link rel="alternate" hreflang="x-default" href="/en/background-color.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -12,6 +12,7 @@
<link rel="alternate" hreflang="vi" href="/vi/bmp-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/bmp-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/bmp-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/bmp-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/change-permissions.html" /> <link rel="alternate" hreflang="en" href="/en/change-permissions.html" />
<link rel="alternate" hreflang="de" href="/de/change-permissions.html" /> <link rel="alternate" hreflang="de" href="/de/change-permissions.html" />
<link rel="alternate" hreflang="vi" href="/vi/change-permissions.html" /> <link rel="alternate" hreflang="vi" href="/vi/change-permissions.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/combine-single-page.html" /> <link rel="alternate" hreflang="en" href="/en/combine-single-page.html" />
<link rel="alternate" hreflang="de" href="/de/combine-single-page.html" /> <link rel="alternate" hreflang="de" href="/de/combine-single-page.html" />
<link rel="alternate" hreflang="vi" href="/vi/combine-single-page.html" /> <link rel="alternate" hreflang="vi" href="/vi/combine-single-page.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/compare-pdfs.html" /> <link rel="alternate" hreflang="en" href="/en/compare-pdfs.html" />
<link rel="alternate" hreflang="de" href="/de/compare-pdfs.html" /> <link rel="alternate" hreflang="de" href="/de/compare-pdfs.html" />
<link rel="alternate" hreflang="vi" href="/vi/compare-pdfs.html" /> <link rel="alternate" hreflang="vi" href="/vi/compare-pdfs.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/compress-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/compress-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/compress-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/compress-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/crop-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/crop-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/crop-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/crop-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link href="../../node_modules/cropperjs/dist/cropper.min.css" rel="stylesheet" /> <link href="../../node_modules/cropperjs/dist/cropper.min.css" rel="stylesheet" />
</head> </head>

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/decrypt-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/decrypt-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/decrypt-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/decrypt-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/decrypt-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/decrypt-pdf.html" />

View File

@@ -12,6 +12,7 @@
<link rel="alternate" hreflang="vi" href="/vi/delete-pages.html" /> <link rel="alternate" hreflang="vi" href="/vi/delete-pages.html" />
<link rel="alternate" hreflang="x-default" href="/en/delete-pages.html" /> <link rel="alternate" hreflang="x-default" href="/en/delete-pages.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/divide-pages.html" /> <link rel="alternate" hreflang="en" href="/en/divide-pages.html" />
<link rel="alternate" hreflang="de" href="/de/divide-pages.html" /> <link rel="alternate" hreflang="de" href="/de/divide-pages.html" />
<link rel="alternate" hreflang="vi" href="/vi/divide-pages.html" /> <link rel="alternate" hreflang="vi" href="/vi/divide-pages.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/edit-attachments.html" /> <link rel="alternate" hreflang="en" href="/en/edit-attachments.html" />
<link rel="alternate" hreflang="de" href="/de/edit-attachments.html" /> <link rel="alternate" hreflang="de" href="/de/edit-attachments.html" />
<link rel="alternate" hreflang="vi" href="/vi/edit-attachments.html" /> <link rel="alternate" hreflang="vi" href="/vi/edit-attachments.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/edit-metadata.html" /> <link rel="alternate" hreflang="en" href="/en/edit-metadata.html" />
<link rel="alternate" hreflang="de" href="/de/edit-metadata.html" /> <link rel="alternate" hreflang="de" href="/de/edit-metadata.html" />
<link rel="alternate" hreflang="vi" href="/vi/edit-metadata.html" /> <link rel="alternate" hreflang="vi" href="/vi/edit-metadata.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/edit-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/edit-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/edit-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/edit-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/encrypt-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/encrypt-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/encrypt-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/encrypt-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/encrypt-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/encrypt-pdf.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/extract-attachments.html" /> <link rel="alternate" hreflang="en" href="/en/extract-attachments.html" />
<link rel="alternate" hreflang="de" href="/de/extract-attachments.html" /> <link rel="alternate" hreflang="de" href="/de/extract-attachments.html" />
<link rel="alternate" hreflang="vi" href="/vi/extract-attachments.html" /> <link rel="alternate" hreflang="vi" href="/vi/extract-attachments.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/extract-pages.html" /> <link rel="alternate" hreflang="vi" href="/vi/extract-pages.html" />
<link rel="alternate" hreflang="x-default" href="/en/extract-pages.html" /> <link rel="alternate" hreflang="x-default" href="/en/extract-pages.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/fix-page-size.html" /> <link rel="alternate" hreflang="en" href="/en/fix-page-size.html" />
<link rel="alternate" hreflang="de" href="/de/fix-page-size.html" /> <link rel="alternate" hreflang="de" href="/de/fix-page-size.html" />
<link rel="alternate" hreflang="vi" href="/vi/fix-page-size.html" /> <link rel="alternate" hreflang="vi" href="/vi/fix-page-size.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/flatten-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/flatten-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/flatten-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/flatten-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/flatten-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/flatten-pdf.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/form-filler.html" /> <link rel="alternate" hreflang="vi" href="/vi/form-filler.html" />
<link rel="alternate" hreflang="x-default" href="/en/form-filler.html" /> <link rel="alternate" hreflang="x-default" href="/en/form-filler.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/header-footer.html" /> <link rel="alternate" hreflang="vi" href="/vi/header-footer.html" />
<link rel="alternate" hreflang="x-default" href="/en/header-footer.html" /> <link rel="alternate" hreflang="x-default" href="/en/header-footer.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -12,6 +12,7 @@
<link rel="alternate" hreflang="vi" href="/vi/heic-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/heic-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/heic-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/heic-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/image-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/image-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/image-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/image-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/invert-colors.html" /> <link rel="alternate" hreflang="vi" href="/vi/invert-colors.html" />
<link rel="alternate" hreflang="x-default" href="/en/invert-colors.html" /> <link rel="alternate" hreflang="x-default" href="/en/invert-colors.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/jpg-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/jpg-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/jpg-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/jpg-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/linearize-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/linearize-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/linearize-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/linearize-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/linearize-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/linearize-pdf.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/merge-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/merge-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/merge-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/merge-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/n-up-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/n-up-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/n-up-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/n-up-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/n-up-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/n-up-pdf.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/ocr-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/ocr-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/ocr-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/ocr-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/ocr-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/ocr-pdf.html" />

View File

@@ -2,16 +2,17 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Duplicate and Organize PDF Pages - BentoPDF</title> <title>Duplicate and Organize PDF Pages - BentoPDF</title>
<meta name="description" content="Reorder, duplicate, and organize PDF pages. Free and secure."> <meta name="description" content="Reorder, duplicate, and organize PDF pages. Free and secure.">
<link rel="icon" type="image/png" href="/images/favicon.svg" /> <link rel="icon" type="image/png" href="/images/favicon.svg" />
<link rel="alternate" hreflang="en" href="/en/organize-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/organize-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/organize-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/organize-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/organize-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/organize-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/organize-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/organize-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/page-dimensions.html" /> <link rel="alternate" hreflang="en" href="/en/page-dimensions.html" />
<link rel="alternate" hreflang="de" href="/de/page-dimensions.html" /> <link rel="alternate" hreflang="de" href="/de/page-dimensions.html" />
<link rel="alternate" hreflang="vi" href="/vi/page-dimensions.html" /> <link rel="alternate" hreflang="vi" href="/vi/page-dimensions.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/page-numbers.html" /> <link rel="alternate" hreflang="vi" href="/vi/page-numbers.html" />
<link rel="alternate" hreflang="x-default" href="/en/page-numbers.html" /> <link rel="alternate" hreflang="x-default" href="/en/page-numbers.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-bmp.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-bmp.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-bmp.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-bmp.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-greyscale.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-greyscale.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-greyscale.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-greyscale.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-jpg.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-jpg.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-jpg.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-jpg.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-png.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-png.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-png.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-png.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-tiff.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-tiff.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-tiff.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-tiff.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-webp.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-webp.html" />
<link rel="alternate" hreflang="x-default" href="/en/pdf-to-webp.html" /> <link rel="alternate" hreflang="x-default" href="/en/pdf-to-webp.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/pdf-to-zip.html" /> <link rel="alternate" hreflang="en" href="/en/pdf-to-zip.html" />
<link rel="alternate" hreflang="de" href="/de/pdf-to-zip.html" /> <link rel="alternate" hreflang="de" href="/de/pdf-to-zip.html" />
<link rel="alternate" hreflang="vi" href="/vi/pdf-to-zip.html" /> <link rel="alternate" hreflang="vi" href="/vi/pdf-to-zip.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/png-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/png-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/png-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/png-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/posterize-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/posterize-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/posterize-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/posterize-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/posterize-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/posterize-pdf.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/remove-annotations.html" /> <link rel="alternate" hreflang="vi" href="/vi/remove-annotations.html" />
<link rel="alternate" hreflang="x-default" href="/en/remove-annotations.html" /> <link rel="alternate" hreflang="x-default" href="/en/remove-annotations.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/remove-blank-pages.html" /> <link rel="alternate" hreflang="vi" href="/vi/remove-blank-pages.html" />
<link rel="alternate" hreflang="x-default" href="/en/remove-blank-pages.html" /> <link rel="alternate" hreflang="x-default" href="/en/remove-blank-pages.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/remove-metadata.html" /> <link rel="alternate" hreflang="en" href="/en/remove-metadata.html" />
<link rel="alternate" hreflang="de" href="/de/remove-metadata.html" /> <link rel="alternate" hreflang="de" href="/de/remove-metadata.html" />
<link rel="alternate" hreflang="vi" href="/vi/remove-metadata.html" /> <link rel="alternate" hreflang="vi" href="/vi/remove-metadata.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/remove-restrictions.html" /> <link rel="alternate" hreflang="en" href="/en/remove-restrictions.html" />
<link rel="alternate" hreflang="de" href="/de/remove-restrictions.html" /> <link rel="alternate" hreflang="de" href="/de/remove-restrictions.html" />
<link rel="alternate" hreflang="vi" href="/vi/remove-restrictions.html" /> <link rel="alternate" hreflang="vi" href="/vi/remove-restrictions.html" />

View File

@@ -11,6 +11,7 @@
<link rel="alternate" hreflang="vi" href="/vi/repair-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/repair-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/repair-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/repair-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/reverse-pages.html" /> <link rel="alternate" hreflang="en" href="/en/reverse-pages.html" />
<link rel="alternate" hreflang="de" href="/de/reverse-pages.html" /> <link rel="alternate" hreflang="de" href="/de/reverse-pages.html" />
<link rel="alternate" hreflang="vi" href="/vi/reverse-pages.html" /> <link rel="alternate" hreflang="vi" href="/vi/reverse-pages.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/rotate-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/rotate-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/rotate-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/rotate-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/rotate-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/rotate-pdf.html" />

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/sanitize-pdf.html" /> <link rel="alternate" hreflang="en" href="/en/sanitize-pdf.html" />
<link rel="alternate" hreflang="de" href="/de/sanitize-pdf.html" /> <link rel="alternate" hreflang="de" href="/de/sanitize-pdf.html" />
<link rel="alternate" hreflang="vi" href="/vi/sanitize-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/sanitize-pdf.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/sign-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/sign-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/sign-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/sign-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/split-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/split-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/split-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/split-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/svg-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/svg-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/svg-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/svg-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/text-color.html" /> <link rel="alternate" hreflang="vi" href="/vi/text-color.html" />
<link rel="alternate" hreflang="x-default" href="/en/text-color.html" /> <link rel="alternate" hreflang="x-default" href="/en/text-color.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -12,6 +12,7 @@
<link rel="alternate" hreflang="vi" href="/vi/tiff-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/tiff-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/tiff-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/tiff-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/txt-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/txt-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/txt-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/txt-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="/images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="/images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="alternate" hreflang="en" href="/en/view-metadata.html" /> <link rel="alternate" hreflang="en" href="/en/view-metadata.html" />
<link rel="alternate" hreflang="de" href="/de/view-metadata.html" /> <link rel="alternate" hreflang="de" href="/de/view-metadata.html" />
<link rel="alternate" hreflang="vi" href="/vi/view-metadata.html" /> <link rel="alternate" hreflang="vi" href="/vi/view-metadata.html" />

View File

@@ -13,6 +13,7 @@
<link rel="alternate" hreflang="vi" href="/vi/webp-to-pdf.html" /> <link rel="alternate" hreflang="vi" href="/vi/webp-to-pdf.html" />
<link rel="alternate" hreflang="x-default" href="/en/webp-to-pdf.html" /> <link rel="alternate" hreflang="x-default" href="/en/webp-to-pdf.html" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="/src/css/styles.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" sizes="any" />
</head> </head>
<body class="antialiased bg-gray-900"> <body class="antialiased bg-gray-900">

View File

@@ -273,6 +273,7 @@
<script type="module" src="src/js/utils/lucide-init.ts"></script> <script type="module" src="src/js/utils/lucide-init.ts"></script>
<script type="module" src="src/version.ts"></script> <script type="module" src="src/version.ts"></script>
<script type="module" src="src/js/mobileMenu.ts"></script> <script type="module" src="src/js/mobileMenu.ts"></script>
<script type="module" src="src/js/main.ts"></script>
</body> </body>
</html> </html>