Guest User

Untitled

a guest
Feb 15th, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.03 KB | None | 0 0
  1. #! /bin/bash
  2.  
  3. #######################################################
  4. #*****************************************************#
  5. #Skrypt dodający znak wodny do pdfa, oraz zabraniający#
  6. #edycji, druku itd.                   #
  7. #Wykorzystuje program pdftk               #
  8. #Użyj --help, by dowiedzieć się więcej            #
  9. #*****************************************************#
  10. #######################################################
  11.  
  12. #######################################################
  13. #W tej sekcji możesz skonfigurować ustawienia domyślne.
  14. #Polecam jednak korzystać z --configure
  15. #Dopisek do pliku wyjściowego                 
  16. SUFIKS="_demo"
  17. #Hasło właściciela
  18. D_HASLO="CzyKotySniaOMysichOwcach"
  19. #Znak wodny (śc. bezwględna, D_ZNAK="0" oznacza jego brak)
  20. D_ZNAK="0"
  21. #Zezwolenia użytkownika (D_ZEZWOLENIA="0" - brak zezwoleń)
  22. D_ZEZWOLENIA="0"
  23. #######################################################
  24. #--ulubione_przez_M
  25. #######################################################
  26. #Deklaracje
  27. bold=`tput bold`
  28. normal=`tput sgr0`
  29. SKRYPT=$0
  30. #######################################################
  31. #Wypisywanie opcji
  32. skladnia()
  33. {
  34. echo "${bold}$0${normal} [plik_wejściowy] [OPCJE]
  35.  
  36. ${bold}OPCJE${normal}
  37.    Brak podania opcji powoduje, iż skrypt czyta z domyślnych ustawień. Można korzystać z dowolnych parametrów równocześnie.
  38.  
  39. ${bold}--settings${normal}      wypisuje ustawienia domyślnego.
  40.  
  41. ${bold}--configure${normal}     kreator ustawień domyślnych.
  42.  
  43. ${bold}-o${normal} [plik-wyjsciowy] pozwala wybrać plik wyjściowy.
  44.  
  45. ${bold}-b${normal} [plik-tła]      umożliwia ustawienie znaku wodnego. Musi to być również plik PDF. Przy różnych rozmiarach stron zostanie on przeskalowany.
  46.  
  47. ${bold}-p${normal} [hasło]     ustalenie hasła właściciela dla pliku wyjściowego.
  48.  
  49. ${bold}-a${normal} [nazwy-uprawnień]   zwiększa uprawnienia użytkownika końcowego ponad uprawnienia domyślne. Nazwy uprawnień rozdzielone powinny być spacjami.
  50.  
  51. ${bold}--help${normal}          pomoc.
  52. "
  53. }
  54. ######################################################
  55. #Funkcja pomocy
  56. pomoc()
  57. {
  58.   echo $"
  59. ${bold}MAŁY PLIK POMOCY${normal}
  60.    Skrypt ten ma na celu szybkie korzystanie z możliwości zabezpieczenia PDFów, poprzez własny znak wodny oraz uniemożliwienie wydruku, kopiowania zawartości etc. Wykorzystuje w tym celu program ${bold}pdftk${normal}. Musisz go mieć zainstalowanego na komputerze. Równocześnie wykorzystuje tylko niezwykle małą część możliwości programu ${bold}pdftk${normal}, jednakże w ściśle określonym celu. Aplikacja nie szyfruje hasła domyślnego!
  61.  
  62. ${bold}SKŁADNIA${normal}"
  63. skladnia
  64. echo $"${bold}NAZWY UPRAWNIEŃ${normal}
  65.    Skrypt obsługuje następujące uprawnienia dla użytkownika końcowego:
  66.  
  67. ${bold}Printing${normal}
  68. Dokument można drukować w pełnej jakości.
  69.  
  70. ${bold}DegradedPrinting${normal}
  71. Dokument można drukować tylko w obniżonej jakości.
  72.  
  73. ${bold}ModifyContents${normal}
  74. Można modyfikować zawartość dokumentu.
  75.  
  76. ${bold}Assembly${normal}
  77. Dokument PDF można łączyć z innymi dokumentami PDF.
  78.  
  79. ${bold}CopyContents${normal}
  80. Tekst i obrazy dokumentu mogą być kopiowane za pośrednictwem schowka.
  81.  
  82. ${bold}ModifyAnnotations${normal}
  83. Można modyfikować i tworzyć komentarze.
  84.  
  85. ${bold}Fillln${normal}
  86. Można wypełniać formularze w dokumencie PDF.
  87.  
  88. ${bold}AllFeatures${normal}
  89. Wszystkie uprawnienia do dokumentu.
  90.  
  91. ${bold}PRZYKŁADY UŻYCIA${normal}
  92. Dosłownie kilka, bo dużo więcej możliwości nie ma:
  93.  
  94. ${bold}$0 ./plik.pdf${normal}
  95. W przypadku ustawień podstawowych programu otrzymujemy na wyjściu: ${bold}./plik_demo.pdf${normal} pozwalający użytkownikowi końcowemu jedynie na czytanie zawartości. Nie zawiera znaku wodnego.
  96.  
  97. ${bold}$0 ./plik.pdf -o ./inny_plik.pdf ${normal}
  98. Otrzymujemy plik ${bold}$./inny_plik.pdf${normal}
  99.  
  100. ${bold}$0 ~/plik.pdf -o ~/Dokumenty/inny_plik.pdf -b ~/Obrazy/znak.pdf -a DegradedPrinting${normal}
  101. Po działaniu skryptu uzyskujemy ${bold}inny_plik.pdf${normal} w katalogu Dokumenty w folderze domowym. Ponadto w tle dokumentu będzie nasz znak wodny z pliku ${bold}znak.pdf${normal} znajdującego się w katalogu Obrazy. Użytkownik końcowy może wydrukować tak stworzony PDF jedynie w gorszej jakości.
  102.  
  103. ${bold}NOTA KOŃCOWA${normal}
  104. A kopiujcie sobie jak chcecie :)
  105.  
  106. P. S.
  107. --kotek
  108. "
  109. }
  110. ######################################################
  111. #Wypisywanie ustawień domyślnych --settings
  112. domyslne()
  113. {
  114. echo $"
  115. Aktualna konfiguracja domyślna:
  116.  
  117. ${bold}Sufiks:${normal}     $SUFIKS
  118.  
  119. ${bold}Hasło:${normal}     $D_HASLO
  120.  
  121. ${bold}Znak wodny:${normal} $D_ZNAK
  122.  
  123. ${bold}Uprawnienia:${normal}    $D_ZEZWOLENIA
  124. "
  125. }
  126. ######################################################
  127. #Konfiguracja ustawień domyślnych --configure
  128. konfiguruj()
  129. {
  130. domyslne
  131. PS3="Wybierz, które ustawienie domyślne chcesz zmodyfikować:"
  132. select DOM in "Dopisek do pliku wyjściowego" "Hasło właściciela" "Ścieżkę znaku wodnego" "Zezwolenia użytkownika końcowego" "Anuluj zmiany" "Zapisz zmiany"; do
  133. case $DOM in
  134.   "Dopisek do pliku wyjściowego")
  135.     echo " Podaj nowy przyrostek:"
  136.     read N_SUFIKS
  137.     while [ -z "$N_SUFIKS" ]; do
  138.       echo "Przyrostek nie może być pusty, proszę podaj nowy:"
  139.       read N_SUFIKS
  140.     done
  141.   ;;
  142.   "Hasło właściciela")
  143.     echo "Podaj nowe hasło:"
  144.     read N_HASLO
  145.     while [ -z "$N_HASLO" ]; do
  146.       echo "Hasło nie może być puste, proszę podaj nowe:"
  147.       read N_HASLO
  148.     done
  149.   ;;
  150.   "Ścieżkę znaku wodnego")
  151.     echo "Podaj proszę ścieżkę bezwzględną znaku wodnego. Puste pole lub 0 oznacza domyślny brak symbolu."
  152.     read N_ZNAK
  153.     while [ "${N_ZNAK:`expr ${#N_ZNAK} - 4`:${#N_ZNAK}}" != ".pdf" ] && [ -n "$N_ZNAK" ] && [ "$N_ZNAK" != 0 ]; do
  154.      echo "Znak wodny musi być plikiem PDF, równy 0 lub pusty. Proszę wprowadź go ponownie:"
  155.      read N_ZNAK
  156.    done
  157.    if [ -z "$N_ZNAK" ]
  158.    then
  159.      N_ZNAK="0"
  160.    fi
  161.  ;;
  162.  "Zezwolenia użytkownika końcowego")
  163.    echo $"Podaj wybrane zezwolenia. Puste pole lub 0 oznacza domyślny zezwolenie jedynie na otwieranie PDFa.
  164. Możliwe zezwolenia to: Printing DegradedPrinting ModifyContents Assembly CopyContents ModifyAnnotations Fillln AllFeatures"
  165.    read N_ZEZWOLENIA
  166.    NZ=`echo $N_ZEZWOLENIA | sed -e "s/[[:space:]]//;s/DegradedPrinting//;s/Printing//;s/ModifyContents//;s/Assembly//;s/CopyContents//;s/ModifyAnnotations//;s/Fillln//;s/AllFeatures//;s/0//"`
  167.    echo $NZ
  168.    while [ -n "$NZ" ];do
  169.      echo "Podano złe zezwolenia, proszę spróbuj ponownie:"
  170.      read N_ZEZWOLENIA
  171.      NZ=`echo $N_ZEZWOLENIA | sed -e "s/[[:space:]]//;s/DegradedPrinting//;s/Printing//;s/ModifyContents//;s/Assembly//;s/CopyContents//;s/ModifyAnnotations//;s/Fillln//;s/AllFeatures//;s/0//"`
  172.    done
  173.    if [ -z "$N_ZEZWOLENIA" ]
  174.    then
  175.      N_ZEZWOLENIA="0"
  176.    fi
  177.  ;;
  178.  "Anuluj zmiany")
  179.    echo "Nie zapisano zmian!"
  180.    exit 1
  181.  ;;
  182.  "Zapisz zmiany")
  183.    if [ -n "$N_SUFIKS" ]    
  184.    then
  185.      sed -i "/^SUFIKS=/ s+${SUFIKS}+${N_SUFIKS}+" $SKRYPT
  186.    fi
  187.    if [ -n "$N_HASLO" ]
  188.    then
  189.    sed -i "/^D_HASLO=/ s+${D_HASLO}+${N_HASLO}+" $SKRYPT
  190.    fi
  191.    if [ -n "$N_ZNAK" ]
  192.    then
  193.    sed -i "/^D_ZNAK=/ s+${D_ZNAK}+${N_ZNAK}+" $SKRYPT
  194.    fi
  195.    if [ -n "$N_ZEZWOLENIA" ]
  196.    then
  197.    sed -i "/^D_ZEZWOLENIA=/ s+${D_ZEZWOLENIA}+${N_ZEZWOLENIA}+" $SKRYPT
  198.    fi
  199.    sleep 1s
  200.    echo "done"
  201.    exit 1
  202.  ;;
  203.  *)
  204.    echo "Nie zapisano zmian!"
  205.    exit 1
  206.  ;;
  207. esac
  208. done
  209. }
  210. #######################################################
  211. #Tu się zaczyna właściwy kod. Lepiej nie ruszać,drapie
  212. if [ "$1" = "--help" ]
  213. then
  214.  pomoc | more
  215. elif [ "$1" = "--settings" ]
  216. then
  217.  domyslne
  218. elif [ "$1" = "--configure" ]
  219. then
  220.  konfiguruj
  221. else
  222.  WEJSCIE=$1
  223.  shift 1
  224.  if [ -z "$WEJSCIE" ]
  225.  then
  226.    echo "Brak wejscia!"
  227.    skladnia
  228.    echo "Aby uzyskać większą pomoc użyj: ${bold}$0 --help${normal}"
  229.    exit 1
  230.  fi
  231.  if [ "$WEJSCIE" != "--kotek" ] && [ "$WEJSCIE" != "--kotki" ]
  232.  then
  233.  if [ "${WEJSCIE:`expr ${#WEJSCIE} - 4`:${#WEJSCIE}}" != ".pdf" ]
  234.  then
  235.    echo "Plik na wejściu nie jest PDFem."
  236.    exit 1
  237.  fi
  238.  if [ -z "$1" ]
  239.  then
  240.  echo "Wybrano ustawienia domyślne"
  241.  fi
  242.  while [ "$#" != "0" ] && [ "$#" != "1" ]; do
  243.    if [ "$1" = '-p' ]
  244.    then
  245.      HASLO="$2"
  246.    elif [ "$1" = '-o' ]
  247.    then
  248.      WYJSCIE="$2"
  249.    elif [ "$1" = '-b' ]
  250.    then
  251.      ZNAK="$2"
  252.    elif [ "$1" = '-a' ]
  253.    then
  254.      ZEZWOLENIA="$2"
  255.      ZEZW=`echo $N_ZEZWOLENIA | sed -e "s/[[:space:]]//;s/DegradedPrinting//;s/Printing//;s/ModifyContents//;s/Assembly//;s/CopyContents//;s/ModifyAnnotations//;s/Fillln//;s/AllFeatures//;s/0//"`
  256.      if [ -n "$NZ" ]
  257.      then
  258.     echo "Błędne zezwolenia"
  259.     skladnia
  260.     exit 1
  261.      fi
  262.    else
  263.      echo "Błędna składnia!"
  264.      skladnia
  265.      exit 1
  266.    fi
  267.    shift 2
  268.  done
  269.  if [ -z "$WYJSCIE" ]
  270.  then
  271.    WYJSCIE="${WEJSCIE:0:`expr ${#WEJSCIE} - 4`}${SUFIKS}.pdf"
  272.  fi
  273.  if [ -z "$HASLO" ]
  274.  then
  275.    HASLO="$D_HASLO"
  276.  fi
  277.  echo $"
  278. ${bold}Wejscie:${normal} $WEJSCIE"
  279.  echo "
  280. ${bold}Wyjście:${normal} $WYJSCIE"
  281.  echo "
  282. ${bold}Hasło właściciela:${normal} $HASLO"
  283.  if [ -e "$ZNAK" ]
  284.  then
  285.    echo "
  286. ${bold}Znak wodny:${normal} $ZNAK"
  287.    TLO="background"
  288.  else
  289.    if [ -e "$D_ZNAK" ] && [ "$D_ZNAK" != "0" ]
  290.    then
  291.      ZNAK="$D_ZNAK"
  292.      TLO="background"
  293.      echo "
  294. ${bold}Znak wodny:${normal} $ZNAK"
  295.    else
  296.      TLO=""
  297.      echo "
  298. ${bold}Bez znaku wodnego${normal}"
  299.    fi
  300.  fi
  301.  if [ -z "$ZEZWOLENIA" ]
  302.    then
  303.      if [ "$D_ZEZWOLENIA" = "0" ]
  304.      then
  305.     echo "
  306. ${bold}Zezwolenie tylko na otwarcie${normal}"
  307.     ZEZ=""
  308.      else
  309.     ZEZ="allow"
  310.     ZEZWOLENIA="$D_ZEZWOLENIA"
  311.      fi
  312.    else
  313.     ZEZ="allow"
  314.    fi
  315.    if [ "$ZEZ" = "allow" ]
  316.    then
  317.      echo "
  318. ${bold}Zezwolenia:${normal} $ZEZWOLENIA"
  319.  fi
  320. # echo "$WEJSCIE" "$TLO" "$ZNAK" output "$WYJSCIE" owner_pw "$HASLO" "$ZEZ" "$ZEZWOLENIA"
  321.  if [ -z "$TLO" ]
  322.  then
  323.    if [ -z "$ZEZ" ]
  324.    then
  325.      pdftk "$WEJSCIE" output "$WYJSCIE" owner_pw "$HASLO"
  326.    else
  327.      pdftk "$WEJSCIE" output "$WYJSCIE" owner_pw "$HASLO" "$ZEZ" "$ZEZWOLENIA"
  328.    fi
  329.  else
  330.    if [ -z "$ZEZ" ]  
  331.    then
  332.      pdftk "$WEJSCIE" "$TLO" "$ZNAK" output "$WYJSCIE" owner_pw "$HASLO"
  333.    else
  334.      pdftk "$WEJSCIE" "$TLO" "$ZNAK" output "$WYJSCIE" owner_pw "$HASLO" "$ZEZ" "$ZEZWOLENIA"
  335.    fi
  336.  fi
  337.  echo "
  338. Done"
  339. else
  340. echo $"LabcdefghijklmnoAprstuwxyzabcdefghijklmnoLprstuwxyzabcdefBDCEKghijklmnoprstuwxyzabLcdefghijklmoprstJuwADEKxyzabcdefghijklmnLoprstuwxyzabcdeKfgHhDKiKjklmnoprstuwxyzaLbcdefghijklmnopHrAstuFwxByzabcdefghijklmLnoprstuwxyzabcdIeCDfAKghiDCEKAjklmnoprstLuwxyzabcdefghijDEKEFjklmnoprstDEKuwxyzabLdefghijklmnoprstuIwxyzabcDdefghijDKklmnoLprstuwxyzabcdefghHKijklmnoKprstuwxyBzabcLdefghijklmnoprstuKwBxyKzabHcdeKEFfghKijkLlmnoprstuwxyzabcdFefD+KIghIijFklmnopHrstLuwxyzabcdefghijklHmnFopGrstuIwxyzabcIEKdLefghijklmnoprstuwIxFyzaHbHDEHcdefgAKDChILijklmnoprstuwxKCFy/zaKCFbIcKCDEd+FefDCFgLhijklmnoprstuwDCECxyzDCECabDCECFcdefghij" | sed 's/[a-z]/ /g;s/A/_/g;s/B/\\/g;s/C/*/g;s/D/\`/g;s/E/-/g;s/F/F/g;s/G/|/g;s/H/:/g;s/I/;/g;s/J/)/g;s/K/./g;s/L/\n/g' | sed "s/F/'/g"
  341. fi
  342. fi
Advertisement
Add Comment
Please, Sign In to add comment