Portál AbcLinuxu, 27. července 2025 20:35


Dotaz: Hromadne vymazanie prazdnych stranok z PDF suboru pod Linuxom

10.5.2017 16:59 Ladislav
Hromadne vymazanie prazdnych stranok z PDF suboru pod Linuxom
Přečteno: 263×
Odpovědět | Admin
Poznate nejaky nastroj pre Linux ktory umoznuje hromadne (z viacerych suborov napr. v adresari) vymazanie prazdnych stranok v PDF (OCRkovych) suboroch ? Dakujem
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 10.5.2017 20:20 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Hromadne vymazanie prazdnych stranok z PDF suboru pod Linuxom
Odpovědět | | Sbalit | Link | Blokovat | Admin
O ničem hotovém nevím. Napsal bych si skript, který použije pdftk k rozdělení na stránky, pak se detekují a smažou prázdné, a ty ostatní se slepí (případně se vyříznou z původního dokumentu).
10.5.2017 23:32 Ladislav
Rozbalit Rozbalit vše Re: Hromadne vymazanie prazdnych stranok z PDF suboru pod Linuxom
Takze som nieco nasiel na webe a podelim sa s komunitou s mojim riesenim: budeme potrebovat pythonovy skript nonblankpages.py
#! /usr/bin/python3
"""Read text input and print non-blank page ranges
(pages should be separated by ^L pagebreaks)"""

import sys

# find non-blank pages
page = 1
blank = True
nonblanks = []
for line in sys.stdin:
  for char in line:
    if char == "\x0c": # ^L, pagebreak
      if not blank:
        nonblanks.append(page)
      # new page
      page += 1
      blank = True
    else:
      blank = False

# exit if no non-blank pages found
if not nonblanks:
  exit(1)

# print ranges of non-blank pages in format used by pdftk
# (e.g. "1-3 5-8 10-10")
ranges = []
nonblanks = sorted(nonblanks)
first_in_range = 0

for i in range(1, len(nonblanks)):
  # if the page increased by more than 1 (i.e. at least one
  # page got skipped), append the current range and start a
  # new one
  if nonblanks[i] > nonblanks[i-1] + 1:
    ranges.append("{}-{}".format(nonblanks[first_in_range],
                                 nonblanks[i-1]))
    first_in_range = i

# append the last range
ranges.append("{}-{}".format(nonblanks[first_in_range],
                             nonblanks[-1]))
print(" ".join(ranges))
potom si spravime bashovy skript ktory v aktualnom adresari vyhlada vyssie popisany pythonacky skript a na zaklade neho prehlada vsetky PDFka (taktiez v aktualnom adresari) a povyhadzuje z nich prazdne stranky (povodne subory s prazdnymi strankami ponecha ako *.old):
#! /bin/bash

for filename in *.pdf; do
    ranges="$(pdftotext "$filename" - | "./nonblankpages.py")"
    mv "$filename" "$filename.old" && pdftk "$filename.old" cat $ranges output "$filename"
idealne riesenie pri adresaroch kde putuju vsetky sietove duplexne PDF skeny s nepotrebnymi prazdnymi strankami... dufam ze niekomu toto riesenie pomoze... :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.