CleanPDF (9 MB)
Criei um pequeno script do PowerShell chamado CleanPDF para remover em lote determinadas áreas de páginas PDF. Nenhum programa adicional precisa ser instalado. É uma solução portátil
O usuário deve configurar uma imagem de máscara adequada para informar ao programa quais áreas devem ser removidas. Use o Paint.net, o Gimp, o Photoshop ou o que você tiver para editar o mask.png e preservar a transparência
Script do PowerShell
# user variables
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
$pdfimages = "$scriptDir\pdfimages.exe"
$convert = "$scriptDir\convert.exe"
$composite = "$scriptDir\composite.exe"
$mask = "$scriptDir\mask.png"
$temp = "$enc:temp\cleanPDF"
# function to remove certain areas from each PDF site according to mask.png
function cleanPDF($file){
# check if temp folder exists. Maybe from a previous run. If yes, delete it
if (Test-Path $temp){ Remove-Item $temp -Force -Recurse}
# Create a new temp folder which is always empty
New-Item $temp -ItemType Dir | Out-Null
# Extract one JPG per PDF site and save them in temp folder
& $pdfimages '-j' $file.FullName "$temp\image"
# Iterate through each new image and process them
Get-ChildItem "$temp\image-*.jpg" | foreach {
# Remove unwanted areas from current JPG with the help of mask.png. Convert JPG to PNG to preserve transparency
& $composite -compose dst-out "$mask" $_.Fullname -matte "$temp\$($_.BaseName)_result.png"
# Convert PNG back to JPG so we can replace transparent with white areas. Without this JPG>PNG>JPG trick they would be black
& $convert "$temp\$($_.BaseName)_result.png" -background white -alpha remove "$temp\$($_.BaseName)_result.jpg"
}
# combine all images back to a single pdf and append "_result" to the file name
& $convert "$temp\image*_result.jpg" "$($file.Directory)/$($file.BaseName)_result.pdf"
# Remove temp folder and work images
Remove-Item $temp -Force -Recurse
}
# Iterate through each passed commandline argument
ForEach ($path in $args){
# Get path as Powershell item
$file = Get-Item $path
# If file extension is .pdf, start CleanPDF function for this pdf
If ($file.Extension.ToLower() -eq '.pdf') { cleanPDF $file }
}
Ferramentas e técnicas usadas
O script usa as seguintes ferramentas de terceiros para lidar com tarefas diferentes
-
pdfimages.exe (fornecido no projeto Xpdf ) para extrair todo o PDF páginas como imagens separadas. Mas por que usar pdfimages quando o imagemagick também é capaz de converter arquivos PDF em imagens? A vantagem do pdfimages é que não precisamos instalar o GhostScript
pdfimages.exe -j C:\inputfile.pdf C:\outputfolder
-
composite.exe (fornecido no projeto imagemagick ) para mascarar certas áreas predefinidas
composite.exe -compose dst-out C:\mask.png C:\input1.jpg -matte C:\output2.png
-
convert.exe (fornecido no projeto imagemagick ) para converter áreas transparentes em áreas brancas. E para combinar todas as imagens processadas de volta para um único PDF
convert.exe C:\input2.png -background white -alpha remove C:\output3.jpg
convert.exe C:\input*.jpg C:\output.pdf
Como usar
-
Faça o download do este arquivo .zip e extraia-o para uma pasta de sua escolha. Você pode ignorar o aviso O site a seguir contém programas prejudiciais da Navegação segura do Google
O arquivo .zip contém todos os arquivos necessários para que você não precise baixar o pacote imagemagick (155 MB) ou o pacote Xpdf (11 MB)
cleanPDF.ps1
convert.exe
composite.exe
pdfimages.exe
mask.png sample.pdf -
Abra sua pasta sendto ( Win + R »shell: sendto) e crie um novo atalho. Nomeie-o como CleanPDF e insira como local de destino o caminho a seguir, mas altere
D:\dir
para sua própria pasta onde você extraiu os arquivos paraC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "D:\dir\cleanPDF.ps1"
-
Abra
mask.png
e altere-o de acordo com suas necessidades. Todas as regiões não transparentes marcam as áreas que serão removidas (mascaradas). A transparência deve ser preservada -
Clique com o botão direito do mouse em qualquer PDF e escolha Enviar para »CleanPDF . Um novo PDF será criado no mesmo local
OsOPs
sample.pdf (1,35 MB) sample_result.pdf (1,46 MB)