Imagens/imagens-e-pdf.cmd (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
<# :
@echo off
powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression ([System.IO.File]::ReadAllText('%~f0',[System.Text.Encoding]::UTF8))"
exit /b %errorlevel%
#>
# ============================================================
# Imagens e PDF - junta imagens em PDF, ou PDF em imagens (ImageMagick)
# Desenvolvido por Pablo Murad - 2026
# ============================================================
try { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 } catch {}
try { $Host.UI.RawUI.WindowTitle = 'Imagens e PDF' } catch {}
function Pausar { Write-Host ''; Write-Host 'Pressione Enter para fechar...' -ForegroundColor DarkGray; [void][System.Console]::ReadLine() }
function Titulo($t) {
Write-Host ''
Write-Host '============================================================' -ForegroundColor DarkCyan
Write-Host " $t" -ForegroundColor Cyan
Write-Host '============================================================' -ForegroundColor DarkCyan
}
$extImg = @('.jpg','.jpeg','.png','.webp','.bmp','.tif','.tiff')
Titulo 'Imagens e PDF'
Write-Host ' Desenvolvido por Pablo Murad - 2026' -ForegroundColor DarkGray
Write-Host ''
Write-Host 'Verificando o que é necessário...' -ForegroundColor Gray
$magick = Get-Command magick -ErrorAction SilentlyContinue
if (-not $magick) { Write-Host ''; Write-Host '[ERRO] ImageMagick não encontrado.' -ForegroundColor Red; Write-Host 'Instale com: winget install ImageMagick.ImageMagick' -ForegroundColor White; Pausar; exit 1 }
Write-Host "[OK] ImageMagick: $($magick.Source)" -ForegroundColor Green
Titulo 'O que você quer fazer?'
Write-Host ' [1] Imagens -> PDF (junta todas as imagens de uma pasta num PDF)' -ForegroundColor White
Write-Host ' [2] PDF -> Imagens (salva cada página como imagem)' -ForegroundColor White
$acao = $null
while (-not $acao) { $a = Read-Host 'Opção (1-2)'; switch ($a.Trim()) { '1'{$acao='img2pdf'} '2'{$acao='pdf2img'} default{Write-Host '[!] Digite 1 ou 2.' -ForegroundColor Yellow} } }
if ($acao -eq 'img2pdf') {
# ---- Imagens -> PDF ----
$pasta = $null
while (-not $pasta) {
Titulo 'Pasta com as imagens'
$p = (Read-Host 'Cole o caminho da pasta').Trim().Trim('"')
if (Test-Path -LiteralPath $p -PathType Container) { $pasta = (Resolve-Path -LiteralPath $p).Path } else { Write-Host '[!] Pasta não encontrada.' -ForegroundColor Yellow }
}
$imagens = @(Get-ChildItem -LiteralPath $pasta -File | Where-Object { $extImg -contains $_.Extension.ToLowerInvariant() } | Sort-Object Name)
if ($imagens.Count -eq 0) { Write-Host 'Nenhuma imagem nessa pasta.' -ForegroundColor Yellow; Pausar; exit 0 }
Write-Host ''
Write-Host "$($imagens.Count) imagens encontradas (em ordem alfabética)." -ForegroundColor Cyan
$nome = (Read-Host 'Nome do PDF de saída (Enter = saida.pdf)').Trim()
if ([string]::IsNullOrWhiteSpace($nome)) { $nome = 'saida.pdf' }
if ($nome -notmatch '\.pdf$') { $nome += '.pdf' }
$pdf = Join-Path $pasta $nome
Write-Host ''; Write-Host "Gerando: $pdf ..." -ForegroundColor Cyan
$imgArgs = @($imagens.FullName) + @('-auto-orient', $pdf)
& magick @imgArgs
if ($LASTEXITCODE -eq 0 -and (Test-Path -LiteralPath $pdf)) {
Titulo 'Concluído'
Write-Host "[OK] PDF criado com $($imagens.Count) páginas." -ForegroundColor Green
Write-Host "Arquivo: $pdf"
} else { Write-Host '[ERRO] Falha ao gerar o PDF.' -ForegroundColor Red }
Pausar; exit 0
}
# ---- PDF -> Imagens ----
$pdfAlvo = $null; $modoArquivo = $false
while (-not $pdfAlvo) {
Titulo 'PDF de entrada'
$p = (Read-Host 'Cole o caminho de um PDF ou de uma pasta com PDFs').Trim().Trim('"')
if ((Test-Path -LiteralPath $p -PathType Leaf) -and ($p -match '\.pdf$')) { $pdfAlvo = (Resolve-Path -LiteralPath $p).Path; $modoArquivo = $true }
elseif (Test-Path -LiteralPath $p -PathType Container) { $pdfAlvo = (Resolve-Path -LiteralPath $p).Path; $modoArquivo = $false }
else { Write-Host '[!] Caminho inválido (informe um .pdf ou uma pasta).' -ForegroundColor Yellow }
}
Titulo 'Formato das imagens'
Write-Host ' [1] PNG (sem perdas) [2] JPG (menor)' -ForegroundColor Gray
$fmt = Read-Host 'Formato (Enter = 1)'
$extSaida = if ($fmt.Trim() -eq '2') { '.jpg' } else { '.png' }
$dpiEnt = Read-Host 'Qualidade em DPI (Enter = 150; 300 = alta)'
$dpi = if (($dpiEnt.Trim()) -and ($dpiEnt -as [int])) { [int]$dpiEnt } else { 150 }
if ($modoArquivo) { $pdfs = @(Get-Item -LiteralPath $pdfAlvo) } else { $pdfs = @(Get-ChildItem -LiteralPath $pdfAlvo -File | Where-Object { $_.Extension.ToLowerInvariant() -eq '.pdf' }) }
if ($pdfs.Count -eq 0) { Write-Host 'Nenhum PDF encontrado.' -ForegroundColor Yellow; Pausar; exit 0 }
Titulo 'Processando'
$ok=0;$err=0
foreach ($pf in $pdfs) {
$outDir = Join-Path $pf.DirectoryName ($pf.BaseName + '-imagens')
New-Item -ItemType Directory -Path $outDir -Force | Out-Null
$padraoSaida = Join-Path $outDir ('pagina-%03d' + $extSaida)
Write-Host ''; Write-Host $pf.Name -ForegroundColor Magenta
$imgArgs = @('-density',"$dpi",$pf.FullName)
if ($extSaida -eq '.jpg') { $imgArgs += @('-quality','90','-background','white','-alpha','remove') }
$imgArgs += $padraoSaida
& magick @imgArgs
if ($LASTEXITCODE -eq 0) {
$qtd = @(Get-ChildItem -LiteralPath $outDir -File).Count
Write-Host " [OK] $qtd página(s) -> $outDir" -ForegroundColor Green; $ok++
} else { Write-Host ' [ERRO] Falha ao converter.' -ForegroundColor Red; $err++ }
}
Titulo 'Concluído'
Write-Host "PDFs convertidos: $ok" -ForegroundColor Green
Write-Host "Erros: $err" -ForegroundColor $(if ($err -gt 0){'Red'}else{'Gray'})
Pausar
|