File: /var/www/html/private/index.html
<script type="text/javascript">
var gk_isXlsx = false;
var gk_xlsxFileLookup = {};
var gk_fileData = {};
function filledCell(cell) {
return cell !== '' && cell != null;
}
function loadFileData(filename) {
if (gk_isXlsx && gk_xlsxFileLookup[filename]) {
try {
var workbook = XLSX.read(gk_fileData[filename], { type: 'base64' });
var firstSheetName = workbook.SheetNames[0];
var worksheet = workbook.Sheets[firstSheetName];
// Convert sheet to JSON to filter blank rows
var jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1, blankrows: false, defval: '' });
// Filter out blank rows (rows where all cells are empty, null, or undefined)
var filteredData = jsonData.filter(row => row.some(filledCell));
// Heuristic to find the header row by ignoring rows with fewer filled cells than the next row
var headerRowIndex = filteredData.findIndex((row, index) =>
row.filter(filledCell).length >= filteredData[index + 1]?.filter(filledCell).length
);
// Fallback
if (headerRowIndex === -1 || headerRowIndex > 25) {
headerRowIndex = 0;
}
// Convert filtered JSON back to CSV
var csv = XLSX.utils.aoa_to_sheet(filteredData.slice(headerRowIndex)); // Create a new sheet from filtered array of arrays
csv = XLSX.utils.sheet_to_csv(csv, { header: 1 });
return csv;
} catch (e) {
console.error(e);
return "";
}
}
return gk_fileData[filename] || "";
}
</script><!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PDF转PPTX</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 flex items-center justify-center h-screen">
<div class="bg-white p-8 rounded-lg shadow-lg w-full max-w-md">
<h1 class="text-2xl font-bold text-center mb-6">PDF转PPTX</h1>
<form id="uploadForm" enctype="multipart/form-data" class="space-y-4">
<input type="file" id="pdfFile" name="pdf" accept=".pdf" class="block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100">
<button type="submit" class="w-full bg-blue-500 text-white py-2 px-4 rounded-md hover:bg-blue-600">上传并转换</button>
</form>
<div id="result" class="mt-4"></div>
</div>
<script>
document.getElementById('uploadForm').addEventListener('submit', async (e) => {
e.preventDefault();
const pdfFile = document.getElementById('pdfFile').files[0];
if (!pdfFile) {
document.getElementById('result').innerHTML = '<p class="text-red-500">请先选择PDF文件!</p>';
return;
}
const formData = new FormData();
formData.append('pdf', pdfFile);
document.getElementById('result').innerHTML = '<p class="text-blue-500">正在转换,请稍候...</p>';
try {
const response = await fetch('/convert', {
method: 'POST',
body: formData
});
const result = await response.json();
if (response.ok) {
document.getElementById('result').innerHTML = `<p class="text-green-500">转换成功!<a href="${result.download_url}" class="text-blue-500 underline">下载PPTX</a></p>`;
} else {
document.getElementById('result').innerHTML = `<p class="text-red-500">转换失败:${result.error}</p>`;
}
} catch (error) {
document.getElementById('result').innerHTML = '<p class="text-red-500">发生错误,请重试!</p>';
}
});
</script>
</body>
</html>