Лучший способ очистить PDF без увеличения размера файла

440
Irregular User

Я сканирую много записок формата А4, которые я записываю, но у многих моих старых есть отверстия для скоб. Некоторые из этих сканов также имеют небольшие дефекты, такие как маленькая точка (грязь) на них, что действительно беспокоит меня, когда я читаю эти PDF-файлы.

Я пытался избавиться от отверстий для скрепок путем редактирования, так как отверстия для скрепок всегда находятся в одной и той же области, и я могу просто применить одно и то же редактирование к нескольким страницам. Однако это приводит к печальному результату увеличения размера файла PDF в 7 раз!

Точно так же, когда я пытаюсь удалить пятна грязи вручную, редактируя страницу PDF в рисовании, размер файлов также резко увеличивается примерно до 2 МБ на редактируемую страницу.

Есть ли лучший способ рассказать о том, что я делаю?

Вот пример страницы такого PDF. На этой странице я хотел бы удалить некоторые грязные пятна на текущей странице, отверстия для скоб в левом верхнем углу, отверстия для пробитых отверстий слева и черную полосу в верхнем правом углу.

2
Можете ли вы привести пример одного из этих PDF-файлов и описать недостаток, который вы хотите удалить для этого PDF-файла? Ouroborus 8 лет назад 0
@Ouroborus Конечно, я только что отредактировал его в нижней части поста. Irregular User 8 лет назад 0
Как вы редактируете PDF в Paint? Paint поддерживает только форматы изображений, а не PDF. Donald Duck 7 лет назад 0
@DonaldDuck Для меня это просто щелкните правой кнопкой мыши> изменить с помощью> краски. Поскольку это отсканированные изображения, они представляют собой форматы изображений с нередактируемым текстом (если почерк достаточно аккуратный, в некоторой степени возможен поиск). Irregular User 7 лет назад 0
@IrregularUser Обычно, если вы делаете это с PDF, Paint говорит, что `(путь к файлу) Paint не может прочитать этот файл. Этот файл не является допустимым растровым файлом или его формат не поддерживается`, даже если в PDF есть только изображение, это как минимум то, что он делает со мной. Donald Duck 7 лет назад 0
@DonaldDuck Есть некоторые настройки, которые нужно сделать заранее, чтобы открыть их в краске. Попробуйте настройки> редактирование контента> редактор изображений, затем найдите и выберите рисование. Irregular User 7 лет назад 0

1 ответ на вопрос

1
nixda

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 

Как пользоваться

  1. Загрузите этот ZIP-файл и распакуйте его в папку по вашему выбору. Вы можете проигнорировать предупреждение . Впереди сайт содержит вредоносные программы из безопасного просмотра Google.

    Файл .zip содержит все необходимые файлы, поэтому вам не нужно загружать пакет imagemagick (155 МБ) или пакет Xpdf (11 МБ)

    cleanPDF.ps1
    convert.exe
    композитный
    файл.exe
    pdfimages.exe mask.png sample.pdf

  2. Откройте папку sendto ( Win+ R»shell: sendto) и создайте новый ярлык. Назовите его CleanPDF и введите в качестве целевого местоположения следующий путь, но перейдите D:\dirв свою собственную папку, куда вы распаковали файлы.

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "D:\dir\cleanPDF.ps1" 
  3. Откройте mask.pngи измените его в соответствии с вашими потребностями. Все непрозрачные области отмечают области, которые будут удалены (замаскированы). Прозрачность должна быть сохранена

  4. Щелкните правой кнопкой мыши любой PDF-файл и выберите « Отправить» CleanPDF . Новый PDF будет создан в том же месте


Образец ОП . Обратите внимание, какие части теперь удалены:

sample.pdf (1,35 MB) sample_result.pdf (1,46 MB) 

Это выглядит удивительно. Одна вещь - вы могли бы загрузить его на другой сайт? У меня много проблем с загрузками, даже не начинающимися в firefox / chrome / т.е. там по какой-то причине. Irregular User 8 лет назад 0
@IrregularUser Изменена ссылка с ge.tt на mega.nz. Пожалуйста, попробуйте еще раз nixda 8 лет назад 0