"use client"; import { useEffect, useState } from "react"; import QRCode from "react-qr-code"; import { Printer, AlertCircle } from "lucide-react"; export default function PrintPage() { const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchItems = async () => { try { const res = await fetch("/api/inventory"); if (!res.ok) throw new Error("Failed to fetch inventory from database"); const data = await res.json(); setItems(data); } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchItems(); }, []); const handlePrint = () => { window.print(); }; if (loading) return
Loading inventory codes...
; if (error) return
Error: {error}
; return ( <> {/* On-screen Controls (Hidden in Print) */}

Print QR Labels

Designed for Avery 5160 standard labels (1" x 2-5/8", 30 per sheet).

Printer Settings to check before printing:
  • Scale: 100% (Do not "Fit to Page")
  • Margins: Custom / None (Layout handles margins natively)
  • Paper Size: Letter (8.5x11)
  • Headers and Footers: Disable
{/* Printable Sheet Area */} {/* Printable Sheet Area */} {Array.from({ length: Math.ceil(items.length / 30) }, (_, pageIndex) => (
{items.slice(pageIndex * 30, (pageIndex + 1) * 30).map((item) => (
{item.name}
{item.qrCodeId}
))}
))} ); }