Files
Nexora/resources/views/livewire/pdf-viewer.blade.php
Javi 28c225687a
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
mejoras
2025-05-23 00:26:53 +02:00

74 lines
2.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="h-screen bg-gray-100" wire:ignore>
<!-- Toolbar -->
<div class="fixed top-0 left-0 right-0 bg-white shadow-lg p-4 flex gap-4 z-50">
<button @click="zoomIn"></button>
<button @click="zoomOut"></button>
<input type="number" v-model="currentPage" @change="goToPage">
<span>@{{ currentPage }}/@{{ totalPages }}</span>
</div>
<!-- Visor PDF -->
<div id="pdf-container" class="pt-16">
<livewire-pdf
:url="$pdfUrl"
@page-loaded="totalPages = $event.total"
@page-changed="currentPage = $event.current"
:page="$currentPage"
:zoom="$zoomLevel"
/>
</div>
<!-- Canvas para Anotaciones -->
<canvas id="annotation-layer" class="absolute top-0 left-0"></canvas>
</div>
<script>
const fabricCanvas = new fabric.Canvas('annotation-layer');
// Lógica de interacción con Fabric.js
document.addEventListener('DOMContentLoaded', () => {
Livewire.on('refreshAnnotations', () => {
// Cargar anotaciones desde backend
});
});
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const container = document.getElementById('pdf-viewer');
const pdfInstance = pdfjsLib.getDocument('{{ $pdfUrl }}');
pdfInstance.promise.then(pdf => {
window.pdfDoc = pdf;
Livewire.emit('totalPages', pdf.numPages);
// Función para renderizar página
const renderPage = (num) => {
pdf.getPage(num).then(page => {
const viewport = page.getViewport({ scale: $wire.zoomLevel });
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
container.innerHTML = '';
container.appendChild(canvas);
page.render({
canvasContext: context,
viewport: viewport
});
});
};
// Escuchar cambios desde Livewire
Livewire.on('pageChanged', page => renderPage(page));
Livewire.on('zoomChanged', zoom => renderPage($wire.currentPage));
// Renderizar primera página
renderPage($wire.currentPage);
});
});
</script>