<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos transformar foto em pdf - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/tag/transformar-foto-em-pdf/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/tag/transformar-foto-em-pdf/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 17:22:33 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://webzoneware.com/wp-content/uploads/icon-webzoneware-150x150.png</url>
	<title>Arquivos transformar foto em pdf - Web-Zoneware</title>
	<link>https://webzoneware.com/tag/transformar-foto-em-pdf/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Digitalizar para PDF Online — Scanner de Celular e Webcam &#124; Web-ZoneWare</title>
		<link>https://webzoneware.com/web-ferramentas/pdf/digitalizar-para-pdf/</link>
					<comments>https://webzoneware.com/web-ferramentas/pdf/digitalizar-para-pdf/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Sun, 18 Oct 2026 00:22:46 +0000</pubDate>
				<category><![CDATA[PDF & Documentos]]></category>
		<category><![CDATA[escanear celular pdf]]></category>
		<category><![CDATA[scanner de documentos online]]></category>
		<category><![CDATA[transformar foto em pdf]]></category>
		<category><![CDATA[webcam para pdf]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=29068</guid>

					<description><![CDATA[<p>Transforme seu Smartphone ou Computador em um Scanner Portátil A digitalização rápida de comprovantes fiscais, contratos e certidões agora dispensa scanners tradicionais de mesa. Nossa ferramenta acessa a câmera do seu dispositivo com base nos padrões do W3C Media Capture and Streams, permitindo capturar páginas com calibração inteligente de contraste e remoção de sombras para [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-ferramentas/pdf/digitalizar-para-pdf/">Digitalizar para PDF Online — Scanner de Celular e Webcam | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Preciso instalar algum aplicativo para escanear documentos?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Não. A ferramenta funciona diretamente no navegador do seu smartphone ou computador utilizando a câmera integrada através de conexões seguras WebRTC."
      }
    },
    {
      "@type": "Question",
      "name": "Posso digitalizar várias folhas no mesmo arquivo PDF?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sim. Você pode capturar quantas páginas forem necessárias sequencialmente, aplicar filtros de legibilidade e baixar tudo reunido em um único PDF."
      }
    }
  ]
}
</script>

    <div id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb" class="wzw-tool-container wzw-pdf-suite-wrapper">
        <style>
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb {
                background: linear-gradient(145deg, #0f172a 0%, #1e293b 100%);
                color: #f8fafc;
                border-radius: 16px;
                padding: 24px;
                box-shadow: 0 12px 35px rgba(0, 0, 0, 0.35);
                border: 1px solid #334155;
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
                margin: 20px 0 35px 0;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb * {
                box-sizing: border-box;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-tool-header {
                display: flex;
                align-items: center;
                justify-content: space-between;
                flex-wrap: wrap;
                gap: 12px;
                margin-bottom: 20px;
                padding-bottom: 16px;
                border-bottom: 1px solid rgba(255, 255, 255, 0.1);
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-tool-title {
                margin: 0;
                font-size: 1.35rem;
                font-weight: 800;
                color: #10b981;
                display: flex;
                align-items: center;
                gap: 10px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-badge-client {
                background: rgba(16, 185, 129, 0.15);
                color: #34d399;
                border: 1px solid rgba(16, 185, 129, 0.35);
                padding: 4px 10px;
                border-radius: 20px;
                font-size: 11px;
                font-weight: 700;
                text-transform: uppercase;
                letter-spacing: 0.5px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-camera-box {
                background: #090d16;
                border: 2px dashed #334155;
                border-radius: 14px;
                padding: 20px;
                text-align: center;
                margin-bottom: 20px;
                position: relative;
                overflow: hidden;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb video {
                width: 100%;
                max-width: 640px;
                max-height: 400px;
                border-radius: 10px;
                background: #000;
                display: none;
                margin: 0 auto 15px auto;
                object-fit: contain;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-cam-actions {
                display: flex;
                justify-content: center;
                gap: 12px;
                flex-wrap: wrap;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-btn-cam {
                background: #10b981;
                color: #ffffff;
                border: none;
                border-radius: 8px;
                padding: 12px 20px;
                font-size: 14px;
                font-weight: 700;
                cursor: pointer;
                transition: all 0.2s ease;
                display: inline-flex;
                align-items: center;
                gap: 8px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-btn-cam:hover {
                background: #059669;
                transform: translateY(-2px);
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-btn-secondary {
                background: #1e293b;
                color: #e2e8f0;
                border: 1px solid #475569;
                border-radius: 8px;
                padding: 12px 20px;
                font-size: 14px;
                font-weight: 600;
                cursor: pointer;
                transition: all 0.2s ease;
                display: inline-flex;
                align-items: center;
                gap: 8px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-btn-secondary:hover {
                background: #334155;
                border-color: #94a3b8;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-filters-bar {
                display: flex;
                align-items: center;
                justify-content: space-between;
                flex-wrap: wrap;
                gap: 12px;
                background: rgba(30, 41, 59, 0.7);
                border: 1px solid #334155;
                padding: 14px 18px;
                border-radius: 12px;
                margin-bottom: 20px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-filter-radios {
                display: flex;
                gap: 14px;
                flex-wrap: wrap;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-filter-radios label {
                font-size: 13px;
                font-weight: 600;
                color: #cbd5e1;
                cursor: pointer;
                display: flex;
                align-items: center;
                gap: 6px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-pages-grid {
                display: grid;
                grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
                gap: 16px;
                margin-bottom: 25px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-page-card {
                background: #1e293b;
                border: 1px solid #334155;
                border-radius: 10px;
                padding: 10px;
                position: relative;
                display: flex;
                flex-direction: column;
                align-items: center;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-page-thumb {
                width: 100%;
                height: 220px;
                object-fit: contain;
                background: #0f172a;
                border-radius: 6px;
                margin-bottom: 8px;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-page-ctrls {
                display: flex;
                justify-content: space-between;
                width: 100%;
                align-items: center;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-page-num {
                font-size: 12px;
                font-weight: 700;
                color: #94a3b8;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-icon-btn {
                background: transparent;
                border: none;
                color: #cbd5e1;
                cursor: pointer;
                font-size: 15px;
                padding: 4px;
                border-radius: 4px;
                transition: color 0.2s;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-icon-btn:hover {
                color: #38bdf8;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-icon-btn.danger:hover {
                color: #f87171;
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-main-download {
                background: linear-gradient(135deg, #10b981 0%, #059669 100%);
                color: #ffffff;
                border: none;
                border-radius: 12px;
                padding: 16px 28px;
                font-size: 16px;
                font-weight: 800;
                cursor: pointer;
                transition: all 0.25s ease;
                display: inline-flex;
                align-items: center;
                justify-content: center;
                gap: 10px;
                width: 100%;
                box-shadow: 0 4px 15px rgba(16, 185, 129, 0.4);
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-main-download:hover:not(:disabled) {
                background: linear-gradient(135deg, #059669 0%, #047857 100%);
                transform: translateY(-2px);
                box-shadow: 0 6px 22px rgba(16, 185, 129, 0.6);
            }
            #wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb .wzw-main-download:disabled {
                opacity: 0.5;
                cursor: not-allowed;
            }
        </style>

        <div class="wzw-tool-header">
            <h3 class="wzw-tool-title">
                <span>📷</span> Digitalizar para PDF — Scanner de Celular & Webcam
            </h3>
            <span class="wzw-badge-client">100% Client-Side • Câmera Segura</span>
        </div>

        <div class="wzw-camera-box" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_cam_box">
            <video id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_video" autoplay playsinline></video>
            <div id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_cam_placeholder" style="padding: 30px 15px;">
                <span style="font-size: 52px; display: block; margin-bottom: 12px;">📑</span>
                <p style="font-size: 1.15rem; font-weight: 700; color: #f1f5f9; margin: 0 0 6px 0;">Digitalize Documentos Instantaneamente</p>
                <p style="font-size: 13px; color: #94a3b8; margin: 0;">Use a câmera do seu smartphone ou webcam com realce inteligente de scanner</p>
            </div>

            <div class="wzw-cam-actions">
                <button type="button" class="wzw-btn-cam" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_open_cam">
                    <span>📷</span> Abrir Câmera
                </button>
                <button type="button" class="wzw-btn-cam" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_capture" style="display: none; background: #0284c7;">
                    <span>📸</span> Capturar Página
                </button>
                <button type="button" class="wzw-btn-secondary" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_close_cam" style="display: none;">
                    <span>✕</span> Fechar Câmera
                </button>
                <button type="button" class="wzw-btn-secondary" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_upload">
                    <span>📁</span> Carregar Fotos
                </button>
                <input type="file" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_file_input" accept="image/*" multiple capture="environment" style="display: none;">
            </div>
        </div>

        <div class="wzw-filters-bar">
            <span style="font-size: 13px; font-weight: 700; color: #10b981;">Filtro de Scanner Aplicado:</span>
            <div class="wzw-filter-radios">
                <label><input type="radio" name="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_filter" value="magic" checked> Realce Mágico</label>
                <label><input type="radio" name="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_filter" value="bw"> Documento P&B</label>
                <label><input type="radio" name="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_filter" value="gray"> Escala de Cinza</label>
                <label><input type="radio" name="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_filter" value="original"> Original (Cores)</label>
            </div>
        </div>

        <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;">
            <strong style="font-size: 14px; color: #f8fafc;">Páginas do Documento (<span id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_page_count">0</span>):</strong>
            <button type="button" class="wzw-btn-secondary" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_clear_all" style="padding: 6px 12px; font-size: 12px;">Limpar Todas</button>
        </div>

        <div class="wzw-pages-grid" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_pages_grid">
            <!-- As miniaturas das páginas capturadas aparecerão aqui -->
        </div>

        <button type="button" class="wzw-main-download" id="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_download" disabled>
            <span>📥</span> Gerar e Baixar Documento PDF Completo
        </button>
    </div>

    <script>
    (function() {
        const root = document.getElementById('wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb');
        if (!root) return;

        const video = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_video');
        const camPlaceholder = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_cam_placeholder');
        const btnOpenCam = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_open_cam');
        const btnCapture = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_capture');
        const btnCloseCam = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_close_cam');
        const btnUpload = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_upload');
        const fileInput = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_file_input');
        const pagesGrid = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_pages_grid');
        const pageCountEl = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_page_count');
        const btnClearAll = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_clear_all');
        const btnDownload = root.querySelector('#wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_btn_download');
        const filterRadios = root.querySelectorAll('input[name="wzw_scanpdf_a88c8df6_ac08_4a66_b2f5_2ad77c2109eb_filter"]');

        let stream = null;
        let scannedPages = []; // Array de { id, originalImg, rotation, filter }

        let currentFilter = 'magic';
        filterRadios.forEach(radio => {
            radio.addEventListener('change', () => {
                currentFilter = radio.value;
                updateAllThumbs();
            });
        });

        btnOpenCam.addEventListener('click', async () => {
            try {
                const constraints = {
                    video: {
                        facingMode: { ideal: 'environment' },
                        width: { ideal: 1920 },
                        height: { ideal: 1080 }
                    }
                };
                stream = await navigator.mediaDevices.getUserMedia(constraints);
                video.srcObject = stream;
                video.style.display = 'block';
                camPlaceholder.style.display = 'none';
                btnOpenCam.style.display = 'none';
                btnCapture.style.display = 'inline-flex';
                btnCloseCam.style.display = 'inline-flex';
            } catch (err) {
                console.error(err);
                alert('Não foi possível acessar a câmera: ' + err.message + '\nVocê pode utilizar o botão "Carregar Fotos".');
            }
        });

        function closeCamera() {
            if (stream) {
                stream.getTracks().forEach(track => track.stop());
                stream = null;
            }
            video.style.display = 'none';
            camPlaceholder.style.display = 'block';
            btnOpenCam.style.display = 'inline-flex';
            btnCapture.style.display = 'none';
            btnCloseCam.style.display = 'none';
        }
        btnCloseCam.addEventListener('click', closeCamera);

        btnCapture.addEventListener('click', () => {
            if (!video.videoWidth) return;
            const canvas = document.createElement('canvas');
            canvas.width = video.videoWidth;
            canvas.height = video.videoHeight;
            const ctx = canvas.getContext('2d');
            ctx.drawImage(video, 0, 0);

            const img = new Image();
            img.onload = () => {
                addScannedPage(img);
            };
            img.src = canvas.toDataURL('image/jpeg', 0.95);
        });

        btnUpload.addEventListener('click', () => fileInput.click());
        fileInput.addEventListener('change', (e) => {
            if (!e.target.files) return;
            Array.from(e.target.files).forEach(file => {
                const reader = new FileReader();
                reader.onload = (re) => {
                    const img = new Image();
                    img.onload = () => addScannedPage(img);
                    img.src = re.target.result;
                };
                reader.readAsDataURL(file);
            });
            fileInput.value = '';
        });

        function addScannedPage(img) {
            const pageItem = {
                id: 'p_' + Date.now() + '_' + Math.random().toString(36).substr(2, 5),
                img: img,
                rotation: 0
            };
            scannedPages.push(pageItem);
            renderPages();
        }

        function applyFilterToCanvas(srcImg, rotation, filterType) {
            const canvas = document.createElement('canvas');
            const is90or270 = (rotation % 180 !== 0);
            canvas.width = is90or270 ? srcImg.height : srcImg.width;
            canvas.height = is90or270 ? srcImg.width : srcImg.height;
            const ctx = canvas.getContext('2d');

            ctx.save();
            ctx.translate(canvas.width / 2, canvas.height / 2);
            ctx.rotate((rotation * Math.PI) / 180);
            ctx.drawImage(srcImg, -srcImg.width / 2, -srcImg.height / 2);
            ctx.restore();

            if (filterType === 'original') {
                return canvas;
            }

            const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            const data = imgData.data;

            if (filterType === 'gray') {
                for (let i = 0; i < data.length; i += 4) {
                    const gray = 0.299 * data[i] + 0.587 * data[i+1] + 0.114 * data[i+2];
                    data[i] = gray;
                    data[i+1] = gray;
                    data[i+2] = gray;
                }
            } else if (filterType === 'bw') {
                for (let i = 0; i < data.length; i += 4) {
                    const gray = 0.299 * data[i] + 0.587 * data[i+1] + 0.114 * data[i+2];
                    const val = gray > 138 ? 255 : 0; // Binarização de alto contraste
                    data[i] = val;
                    data[i+1] = val;
                    data[i+2] = val;
                }
            } else if (filterType === 'magic') {
                // Realce mágico: aumenta contraste, reduz sombras e limpa fundo
                for (let i = 0; i < data.length; i += 4) {
                    let r = data[i], g = data[i+1], b = data[i+2];
                    // Normalização e aumento de contraste
                    r = ((r - 128) * 1.35) + 128;
                    g = ((g - 128) * 1.35) + 128;
                    b = ((b - 128) * 1.35) + 128;
                    // White enhancement para texto nítido
                    if (r > 200 && g > 200 && b > 200) {
                        r = 255; g = 255; b = 255;
                    }
                    data[i] = Math.min(255, Math.max(0, r));
                    data[i+1] = Math.min(255, Math.max(0, g));
                    data[i+2] = Math.min(255, Math.max(0, b));
                }
            }

            ctx.putImageData(imgData, 0, 0);
            return canvas;
        }

        function renderPages() {
            pagesGrid.innerHTML = '';
            pageCountEl.textContent = scannedPages.length;
            btnDownload.disabled = (scannedPages.length === 0);

            scannedPages.forEach((item, index) => {
                const card = document.createElement('div');
                card.className = 'wzw-page-card';

                const filteredCanvas = applyFilterToCanvas(item.img, item.rotation, currentFilter);
                const thumb = document.createElement('img');
                thumb.className = 'wzw-page-thumb';
                thumb.src = filteredCanvas.toDataURL('image/jpeg', 0.85);

                const ctrls = document.createElement('div');
                ctrls.className = 'wzw-page-ctrls';

                const num = document.createElement('span');
                num.className = 'wzw-page-num';
                num.textContent = `Pág. ${index + 1}`;

                const btnsDiv = document.createElement('div');
                
                const btnRot = document.createElement('button');
                btnRot.type = 'button';
                btnRot.className = 'wzw-icon-btn';
                btnRot.title = 'Girar 90°';
                btnRot.innerHTML = '🔄';
                btnRot.addEventListener('click', () => {
                    item.rotation = (item.rotation + 90) % 360;
                    renderPages();
                });

                const btnDel = document.createElement('button');
                btnDel.type = 'button';
                btnDel.className = 'wzw-icon-btn danger';
                btnDel.title = 'Excluir Página';
                btnDel.innerHTML = '🗑️';
                btnDel.addEventListener('click', () => {
                    scannedPages = scannedPages.filter(p => p.id !== item.id);
                    renderPages();
                });

                btnsDiv.appendChild(btnRot);
                btnsDiv.appendChild(btnDel);

                ctrls.appendChild(num);
                ctrls.appendChild(btnsDiv);

                card.appendChild(thumb);
                card.appendChild(ctrls);
                pagesGrid.appendChild(card);
            });
        }

        function updateAllThumbs() {
            renderPages();
        }

        btnClearAll.addEventListener('click', () => {
            if (scannedPages.length === 0) return;
            if (confirm('Deseja realmente remover todas as páginas digitalizadas?')) {
                scannedPages = [];
                renderPages();
            }
        });

        btnDownload.addEventListener('click', async () => {
            if (scannedPages.length === 0 || typeof PDFLib === 'undefined') return;

            btnDownload.disabled = true;
            btnDownload.innerHTML = '<span>⏳</span> Compilando PDF de Alta Definição...';

            try {
                const { PDFDocument } = PDFLib;
                const pdfDoc = await PDFDocument.create();

                for (let i = 0; i < scannedPages.length; i++) {
                    const item = scannedPages[i];
                    const canvas = applyFilterToCanvas(item.img, item.rotation, currentFilter);
                    const jpegUrl = canvas.toDataURL('image/jpeg', 0.92);
                    const jpegBytes = await fetch(jpegUrl).then(res => res.arrayBuffer());

                    const embeddedImg = await pdfDoc.embedJpg(jpegBytes);
                    
                    // Ajusta tamanho da página no PDF (A4 padrão ou proporção da imagem)
                    const imgDims = embeddedImg.scale(1.0);
                    // Proporção A4 máxima: 595.28 x 841.89
                    const a4W = 595.28;
                    const a4H = 841.89;

                    const scaleFactor = Math.min(a4W / imgDims.width, a4H / imgDims.height);
                    const finalW = imgDims.width * scaleFactor;
                    const finalH = imgDims.height * scaleFactor;

                    const page = pdfDoc.addPage([a4W, a4H]);
                    // Centraliza a imagem na folha A4
                    const posX = (a4W - finalW) / 2;
                    const posY = (a4H - finalH) / 2;

                    page.drawImage(embeddedImg, {
                        x: posX,
                        y: posY,
                        width: finalW,
                        height: finalH
                    });
                }

                const pdfBytes = await pdfDoc.save();
                const blob = new Blob([pdfBytes], { type: 'application/pdf' });
                const url = URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = url;
                a.download = 'documento-digitalizado-scanner.pdf';
                a.click();
                URL.revokeObjectURL(url);
            } catch (err) {
                console.error(err);
                alert('Erro ao gerar o arquivo PDF: ' + err.message);
            } finally {
                btnDownload.disabled = false;
                btnDownload.innerHTML = '<span>📥</span> Gerar e Baixar Documento PDF Completo';
            }
        });
    })();
    </script>
    



<h2 class="wp-block-heading">Transforme seu Smartphone ou Computador em um Scanner Portátil</h2>



<p class="wp-block-paragraph">A digitalização rápida de comprovantes fiscais, contratos e certidões agora dispensa scanners tradicionais de mesa. Nossa ferramenta acessa a câmera do seu dispositivo com base nos padrões do <a href="https://www.w3.org/TR/mediacapture-streams/" target="_blank" rel="noopener">W3C Media Capture and Streams</a>, permitindo capturar páginas com calibração inteligente de contraste e remoção de sombras para máxima nitidez.</p>



<p class="wp-block-paragraph">Caso o documento capturado precise de assinaturas formais, envie o arquivo resultante diretamente para a ferramenta de <a href="/web-ferramentas/assinar-pdf-digitalmente/">assinatura digital de PDF</a> ou, se contiver números de processo sensíveis, use a rotina de <a href="/web-ferramentas/redigir-ocultar-pdf/">ocultar informações com tarja preta</a>.</p>



<h2 class="wp-block-heading">Passo a Passo para Digitalizar Páginas</h2>



<ol class="wp-block-list">
    <li>Clique em <strong>Iniciar Câmera</strong> e autorize o acesso à webcam ou lente traseira do celular.</li>
    <li>Posicione a página sob boa iluminação e clique em <strong>Capturar Página</strong>.</li>
    <li>Escolha o filtro visual desejado (Colorido, Tons de Cinza ou Alto Contraste B&amp;W).</li>
    <li>Repita o processo para as demais páginas e finalize clicando em <strong>Gerar e Baixar PDF</strong>.</li>
</ol>
<p>O post <a href="https://webzoneware.com/web-ferramentas/pdf/digitalizar-para-pdf/">Digitalizar para PDF Online — Scanner de Celular e Webcam | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-ferramentas/pdf/digitalizar-para-pdf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
