CleanPDF (9 МБ)
Я собрал небольшой скрипт PowerShell под названием CleanPDF для пакетного удаления определенных областей со страниц PDF. Никаких дополнительных программ не нужно устанавливать. Это портативное решение
Пользователь должен установить правильное изображение маски, чтобы сообщить программе, какие области должны быть удалены. Используйте Paint.net, Gimp, Photoshop или все, что вам нужно, чтобы отредактировать mask.png и сохранить прозрачность
Скрипт 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 } }
Используемые инструменты и методы
Скрипт использует следующие сторонние инструменты для решения различных задач.
pdfimages.exe (предоставляется в рамках проекта Xpdf ) для извлечения всех страниц PDF в виде отдельных изображений. Но зачем использовать pdfimages, когда imagemagick также способен конвертировать PDF файлы в изображения? Преимущество pdfimages в том, что нам не нужно устанавливать GhostScript
pdfimages.exe -j C:\inputfile.pdf C:\outputfolder
Composite.exe (предоставляется в рамках проекта imagemagick ) для маскировки определенных предопределенных областей
composite.exe -compose dst-out C:\mask.png C:\input1.jpg -matte C:\output2.png
convert.exe (предоставляется в рамках проекта imagemagick ) для преобразования прозрачных областей в белые области. И объединить все обработанные изображения обратно в один PDF
convert.exe C:\input2.png -background white -alpha remove C:\output3.jpg
convert.exe C:\input*.jpg C:\output.pdf
Как пользоваться
Загрузите этот ZIP-файл и распакуйте его в папку по вашему выбору. Вы можете проигнорировать предупреждение . Впереди сайт содержит вредоносные программы из безопасного просмотра Google.
Файл .zip содержит все необходимые файлы, поэтому вам не нужно загружать пакет imagemagick (155 МБ) или пакет Xpdf (11 МБ)
cleanPDF.ps1
convert.exe
композитный
файл.exe
pdfimages.exe mask.png sample.pdfОткройте папку sendto ( Win+ R»shell: sendto) и создайте новый ярлык. Назовите его CleanPDF и введите в качестве целевого местоположения следующий путь, но перейдите
D:\dir
в свою собственную папку, куда вы распаковали файлы.C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "D:\dir\cleanPDF.ps1"
Откройте
mask.png
и измените его в соответствии с вашими потребностями. Все непрозрачные области отмечают области, которые будут удалены (замаскированы). Прозрачность должна быть сохраненаЩелкните правой кнопкой мыши любой PDF-файл и выберите « Отправить» CleanPDF . Новый PDF будет создан в том же месте
Образец ОП . Обратите внимание, какие части теперь удалены:
sample.pdf (1,35 MB) sample_result.pdf (1,46 MB)