Blogvorlage

http://seriousjr.43-1.org

17.06.2013

Größe minimieren


Voraussetzungen: pdfsizeopt.py1,2

Mit dem Skript pdfsizeopt kann sehr einfach die Größe einer pdf optimiert werden. Das Skript ist sehr effektiv, wenn die .pdf von Latex erstellt worden ist und kann dann die Dateigröße teilweise auf die Hälfte der Originalgröße oder noch tiefer drücken. Vom Skript werden noch pngout und multivalent unterstützt, die man mit einer Übergabe an das Skript deaktiveren kann

Befehl:


python pdfsizeopt.py --use-multivalent=no quelldatei.pdf

In diesem Fall soll multivalent nicht verwendet werden.



  1. Projektseite unter https://code.google.com/p/pdfsizeopt/ --
  2. Der direkte Link zum Skript ist http://pdfsizeopt.googlecode.com/git/pdfsizeopt.py --


13.05.2013

Nützliche Befehle mit pdftk


Voraussetzungen: pdftk1

pdftk wird gern als das Schweizer Messer für Arbeiten mit pdf Dateien beschrieben. Egal, ob man Seiten drehen, hinzufügen, entfernen oder in einer anderen Reihenfolge haben möchte, all das geht mit pdftk. Man kann auch die Metadaten einer pdf anpassen, was hier beschrieben ist.

Mit dem folgenden Befehl können mehrere pdf Dateien (z.B. quelle1.pdf und quelle2.pdf) in einer Datei (zeildatei.pdf) gespeichert werden.

Befehl:


pdftk quelle1.pdf quelle2.pdf cat output zieldatei.pdf

Dabei können vor dem Schlüsselwort cat alle zu vereinigenden Dateien stehen und nach output steht der Name der zu erstellenden Datei. Zwischen cat und output können noch Operationen an den Seiten der Dateien angegeben werden. Um eine Seite zu drehen, nutzt man

Befehl:


# Drehung von Seite 2 im Uhrzeigersinn (E für East)
pdftk quelldatei.pdf cat 2E output zieldatei.pdf

# Drehung von Seite 1 gegen den Uhrzeigersinn (W für West)
pdftk quelldatei.pdf cat 1W output zieldatei.pdf


Extrahieren von Bildern aus einer pdf


Voraussetzungen: poppler

Wenn man eine pdf vor sich hat, und die darin enthaltenen Bilder (so) extrahieren möchte, wie sie der Ersteller für die pdf verwendet hat, dann kann man sie mit folgendem Befehl als .jpg Dateien speichern.

Befehl:


pdfimages -j name.pdf bild 

Dabei steht name.pdf für die pdf Datei mit den Bildern, der Schalter -j erzwingt die Ausgabe als jpg und bild ist ein Namensteil der gespeicherten jpg Dateien.



  1. Projektseite unter http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ --


Realisierung mit Bash


Mit dem folgenden Skript ist es möglich, entweder eine Ascii-Zeichenfolge einzugeben und sich die dazugehörige Binärzeichenkette ausgeben zu lassen, oder umgekehrt.
Dabei wird immer zuerst die Eingabe einer Ascii-Zeichenkette erwartet (oder Enter zum Überspringen) und anschließend eine Binärzeichenkette.

Quellcode: ascii-binary.sh


#!/bin/bash

# oct: 40 - 176

##### -------- Ascii zu Binär wandeln -------- #####

asciitobin() {
   nummer=`printf '%x\n' "'$1"`                            # Die Ascii-Hex-Nummer
                                                           # des aktuellen Zeichens
   decnum=""
   bit=$globalbit

   while [ ! -z "$nummer" ] ; do                           # umwandeln der Hex-Nummer
      element=${nummer:0:1}                                # in eine Dezimalnummer
      let bit=$bit/16
      case $element in
         a)    let element=10*$bit
               let decnum=$decnum+$element;;
         b)    let element=11*$bit
               let decnum+=$element;;
         c)    let element=12*$bit
               let decnum+=$element;;
         d)    let element=13*$bit
               let decnum+=$element;;
         e)    let element=14*$bit
               let decnum+=$element;;
         f)    let element=15*$bit
               let decnum+=$element;;
         *)    let element=$element*$bit
               let decnum+=$element;;
      esac

      nummer=${nummer:1}
   done

   binaer=""
   bit=$globalbit

   while [ $bit -ge 2 ] ; do                               # Schreibe die Binärzeichen
      let bit=$bit/2                                       # aus der ermittelten
                                                           # Dezimalzahl
      if [ $decnum -ge $bit ] ; then
         binaer=${binaer}1
         let decnum-=$bit
      else
         binaer=${binaer}0
      fi
   done
}


##### -------- Binär zu Ascii wandeln -------- #####

bintoascii() {
   block=$1
   bit=$globalbit
   decnum=0

   while [ ${#block} -ge 1 ] ; do                          # ermittle die
      binaerzeichen=${block:0:1}                           # Dezimalzahl aus
      let bit=$bit/2                                       # den Binärzeichen

      if [ $binaerzeichen -eq 1 ] ; then
         let decnum+=$bit
      fi

      block=${block:1}
   done

                                                           # Dezimal -> Hex
   let erstes_zeichen=$decnum/16
   let zweites_zeichen=$decnum-$erstes_zeichen*16

   case $erstes_zeichen in
      15)  erstes_zeichen=f;;
      14)  erstes_zeichen=e;;
      13)  erstes_zeichen=d;;
      12)  erstes_zeichen=c;;
      11)  erstes_zeichen=b;;
      10)  erstes_zeichen=a;;
      *)   ;;
   esac

   case $zweites_zeichen in
      15)  zweites_zeichen=f;;
      14)  zweites_zeichen=e;;
      13)  zweites_zeichen=d;;
      12)  zweites_zeichen=c;;
      11)  zweites_zeichen=b;;
      10)  zweites_zeichen=a;;
      *)   ;;
   esac

   nummer=${erstes_zeichen}${zweites_zeichen}
                                                           # Gebe das Zeichen zur
   zeichen=`printf "%b\n" "\x$nummer"`                     # ermittelten Hexadezi-
}                                                          # malnummer aus


##### -------- Hauptroutine -------- #####

OLDIFS=$IFS
IFS='
'

globalbit=256                                              # 2^8 Möglichkeiten ->
                                                           # 8 Binärzeichen pro Zeichen
echo "Ascii -> Binär und umgekehrt"
echo "Geben Sie einen Ascii-Teststring ein:"

read asciistring

if [ -z "$asciistring" ] ; then
   echo "Sie haben nichts eingegeben"
fi

while [ ! -z "$asciistring" ] ; do                         # Für jedes Zeichen des
   asciitobin ${asciistring:0:1}                           # Ascii Strings soll die
   echo -n $binaer                                         # asciitobin Funktion auf-
   asciistring=${asciistring:1}                            # gerufen werden, die $binaer
done                                                       # auf den gewünschten Binärcode
                                                           # setzt (der ausgegeben wird)
echo ""

echo "Und nun einen Binär-String:"

read binstring

if [ -z $binstring ] ; then                                # Bei der Eingabe des Binär-
   echo "Sie haben nichts eingegeben"                      # strings sind mehrere
   exit 0                                                  # Prüfungen notwendig, weil
fi                                                         # der String nur aus 0 und 1
                                                           # bestehen darf
let laenge=${#binstring}%8                                 # Da jedes Zeichen durch
if [ $laenge -ne 0 ] ; then                                # 8 Binärzeichen dargestellt
   echo "Ungültige String-Länge"                           # wird, muss die Gesamtzahl
   exit 1                                                  # entsprechend sein, weil
fi                                                         # in der bintoascii Funktion
                                                           # nicht überprüft wird, ob
tempbinstring=${binstring//1/}                             # der übergebene String das
tempbinstring=${tempbinstring//0/}                         # richtige Format hat

if [ ! -z $tempbinstring ] ; then
   echo "Ungültige Zeichen enthalten"
   exit 1
fi

while [ ! -z $binstring ] ; do                             # Jeder 8-Binärzeichen Block
   bintoascii ${binstring:0:8}                             # wird übergeben und gewandelt
   echo -n $zeichen
   binstring=${binstring:8}
done

echo ""
IFS=$OLDIFS

exit 0



Realisierung mit Bash


Falls man die Umbrüche in einer Textdatei in Linux auch in Windows erhalten möchte, kann man folgenden Befehl nutzen.

Befehl:


sed 's/$/\r/' linux.txt > windows.txt

Oder wenn alle Dateien in einem Ordner umgewandelt (überschrieben) werden sollen:

Befehl:


sed -i 's/$/\r/' *

 
© 2013 Dominik Zobel <dominik.zobel@tu-harburg.de>

Creative Commons BY License Die aufgelisteten Blogbeiträge und die dazugehörigen Dateien sind unter dieser Creative Commons BY 3.0 Lizenz ( Kurzform ) lizenziert.