import { useState, useEffect, useRef } from 'react'; import { ChevronLeft, ChevronRight, ZoomIn, ZoomOut, Pen, Square, Circle, Highlighter, Download, Upload } from 'lucide-react'; // PDF.js را import می‌کنیم const pdfjsLib = window['pdfjs-dist/build/pdf']; pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js'; export default function PDFViewer() { const [pdfDoc, setPdfDoc] = useState(null); const [pageNum, setPageNum] = useState(1); const [totalPages, setTotalPages] = useState(0); const [scale, setScale] = useState(1.5); const [isDrawing, setIsDrawing] = useState(false); const [selectedTool, setSelectedTool] = useState('text'); // 'text', 'pen', 'square', 'circle', 'highlight' const [selectedColor, setSelectedColor] = useState('#FF0000'); const [lineWidth, setLineWidth] = useState(2); const canvasRef = useRef(null); const textLayerRef = useRef(null); const drawingLayerRef = useRef(null); const fileInputRef = useRef(null); // PDF را لود می‌کند const loadPDF = async (file) => { const fileReader = new FileReader(); fileReader.onload = async function() { const typedarray = new Uint8Array(this.result); const loadedPdf = await pdfjsLib.getDocument(typedarray).promise; setPdfDoc(loadedPdf); setTotalPages(loadedPdf.numPages); renderPage(1, loadedPdf); }; fileReader.readAsArrayBuffer(file); }; // صفحه PDF را رندر می‌کند const renderPage = async (pageNumber, pdf = pdfDoc) => { const page = await pdf.getPage(pageNumber); const viewport = page.getViewport({ scale }); // تنظیم canvas اصلی const canvas = canvasRef.current; const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; // تنظیم canvas رسم const drawingCanvas = drawingLayerRef.current; drawingCanvas.height = viewport.height; drawingCanvas.width = viewport.width; // رندر PDF await page.render({ canvasContext: context, viewport: viewport }).promise; // رندر لایه متن const textContent = await page.getTextContent(); const textLayer = textLayerRef.current; textLayer.style.height = `${viewport.height}px`; textLayer.style.width = `${viewport.width}px`; pdfjsLib.renderTextLayer({ textContent, container: textLayer, viewport, textDivs: [] }); }; // مدیریت رسم const startDrawing = (e) => { if (selectedTool === 'text') return; const ctx = drawingLayerRef.current.getContext('2d'); ctx.beginPath(); ctx.strokeStyle = selectedColor; ctx.lineWidth = lineWidth; const rect = drawingLayerRef.current.getBoundingClientRect(); ctx.moveTo( e.clientX - rect.left, e.clientY - rect.top ); setIsDrawing(true); }; const draw = (e) => { if (!isDrawing || selectedTool === 'text') return; const ctx = drawingLayerRef.current.getContext('2d'); const rect = drawingLayerRef.current.getBoundingClientRect(); ctx.lineTo( e.clientX - rect.left, e.clientY - rect.top ); ctx.stroke(); }; const stopDrawing = () => { setIsDrawing(false); if (selectedTool !== 'text') { setSelectedTool('text'); // برگشت به حالت انتخاب متن } }; // ذخیره حاشیه‌نویسی const saveAnnotations = () => { const dataUrl = drawingLayerRef.current.toDataURL('image/png'); const link = document.createElement('a'); link.download = 'annotations.png'; link.href = dataUrl; link.click(); }; return (
{/* نوار ابزار */}
loadPDF(e.target.files[0])} />
{`${pageNum} / ${totalPages}`}
{`${Math.round(scale * 100)}%`}
setSelectedColor(e.target.value)} className="w-8 h-8 rounded" /> setLineWidth(parseInt(e.target.value))} className="w-24" />
{/* محتوای PDF */}
); } import { useState } from 'react'; import { Brain, BookOpen, Map, PenTool, Users, ChevronRight } from 'lucide-react'; export default function App() { const [activeTab, setActiveTab] = useState('home'); return (
{/* نوار ناوبری */} {/* بخش اصلی */}
{/* قسمت هدر */}

پلتفرم هوشمند یادگیری با کمک هوش مصنوعی

یادگیری شخصی‌سازی شده با استفاده از تکنولوژی‌های پیشرفته هوش مصنوعی

{/* کارت‌های ویژگی */}
} title="مایندمپ هوشمند" description="ایجاد نقشه‌های ذهنی خودکار برای درک بهتر مفاهیم" /> } title="کوییز هوشمند" description="تولید سوالات متناسب با سطح یادگیری شما" /> } title="یادگیری مشارکتی" description="همکاری با سایر دانشجویان و یادگیری گروهی" />
{/* بخش شروع */}
); } function FeatureCard({ icon, title, description }) { return (
{icon}

{title}

{description}

); }