Archive for Maj, 2010

pdftk – operacje na plikach PDF

Podczas przygotowywania materiałów do prezentacji musiałem dokonać kilu operacji na plikach PDF:

  • połączyć kilka plików w jeden
  • wyciąć niektóre strony z pliku PDF i także dodać je do dokumentu wynikowego
  • narzędzie powinno dać się skonfigurować w całości z linii poleceń (prawdopodobnie będzie potrzeba wykonywania operacji kilkukrotnie)

Kiedyś do takie celu wykorzystywałem Jave i bibliotekę iText Pdf, ale tym razem nie bardzo chciałem tworzyć specjalną aplikację. Ostatnio używałem aplikacji do rozpoznawaniu tekstu w dokumentach PDF (Dodanie możliwości przeszukiwanie plików PDF), gdzie do operacji na dokumentach PDF była używana aplikacja pdftk. I nie zawiodłem się :).

Aplikacja pdftk pozwala na manipulację dokumentami PDF, wg dokumentacji:

  • łączenie dokumentów PDF
  • wyodrębniać poszczególne strony
  • obracać strony
  • odszyfrowywać w razie potrzeby pliki (wymagana jest podanie hasła)
  • szyfrowanie tworzonego dokumentu
  • wypełnianie formularzy PDF
  • tworzenie znaku wodnego
  • pobierania oraz aktualizacja metadanych
  • dodawania załączników do stron lub całych dokumentów
  • pobierać załączników
  • naprawiać zepsute dokumenty

Na moje potrzeby wystarczyły dwie pierwsze możliwości i je przedstawię poniżej.

Składania polecenia pdfk na potrzeby tego artykułu (składania jest bardziej skomplikowana, proszę zajrzeć na stronę pomocy polecenia)

pdftk <wej ściowe pliki PDF>
            cat [<argumenty operacji>]
            output <nazwa pliku wyjściowego>

Aby połączyć pliki PDF i utworzyć z nich plik wynikowy wystarczy wydać taką komendę:

pdftk plik1.pdf plik2.pdf cat output wyjście.pdf

Dwa pliki PDF zostaną połączone i zostanie utworzony plik wynikowy o nazwie wyjście.pdf.

Istnieje także możliwość zdefiniowania, jakie strony z którego pliku mają zostać pobrane do pliku wyjściowego. Można także na tych stronach dokonać kilku transformacji. Wymaga to jednak trochę innego wywołania komendy:

pdftk A=plik1.pdf B=plik2.pdf cat A10-12 B3 A13-18even output wyjście.pdf

Jak widać, każda nazwa pliku wejściowego została poprzedzona wielką literą. Jest to tak zwany uchwyt, poprzez który można się następnie odwoływać do plików (nie tylko przy łączniu ich, ale np. także przy podawaniu hasła w celu odszyfrowania danego pliku). Uchwyt musi być pojedynczą wielką literą.

Powyższe polecenie pobierze najpierw z pliku plik1.pdf strony od 10 do 12, następnie doda do tego stronę nr 3 z pliku plik2.pdf i na końcu wstawi nieparzyste strony od 13 do 18 z pliku plik1.pdf.

Poniżej jeszcze znajduje się przykładowy skrypt, który wykonuje takie akcje:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

#set -x

echo "Konfiguracja"
PDFTK=`which pdftk`

SOURCE_DIR="./PDF/"
EXTRA_PDF="extra.pdf"

ROZ_00=`ls $SOURCE_DIR/00*.pdf`
ROZ_01=`ls $SOURCE_DIR/01*.pdf`

OUTPUT_PDF="konspekt.pdf"


# połączenie konspektu w całość

PDF_INPUT_LIST="A=${ROZ_00} B=${ROZ_01} J=${EXTRA_PDF}"

#echo $PDF_INPUT_LIST

CAT="A B J51-70 J110-116"

echo "Tworzenie dokument PDF"
$PDFTK $PDF_INPUT_LIST cat $CAT  output "$OUTPUT_PDF"
echo "Utworzono konspetk: $OUTPUT_PDF"

O wiele więcej informacji można znaleźć w dokumentacji do aplikacji, na jej stronach MAN.

Tags: ,

Typy aplikacji jakie można zainstalować w serwerze aplikacji JBoss

Każda aplikacja, która ma działać w ramach danego serwera JBoss musi zostać najpierw zainstalowana przez niego zainstalowana. Jest to możliwe na kilka sposobów:

  • można umieścić aplikację w katalogu deploy serwera;
  • można zainstalować aplikację przy użyciu polecenia twiddle;
  • można użyć konsoli administracyjnej;

Więcej informacji na temat instalacji aplikacji znajduje się w tym wpisie: Zarządzanie instalacją aplikacji w JBoss AS.

Formaty pakietów z aplikacjami

Instalowana aplikacja może zarówno być w formie archiwum jak i jak katalogu z plikami zapisanymi w odpowiedniej strukturze (archiwum to nic innego jak ten sam katalog skompresowany przy użyciu algorytmu ZIP). Każda z form ma swoje wady i zalety, ale nie różnią się one efektem. Zarówno w jednym jak i drugim przypadku pozwalają na instalację aplikacji.

W przypadku skompresowanego archiwum mamy do czynienia z pojedynczym plikiem, które dużo łatwiej przesłać czy też skopiować. W przypadku jego rozkompresowanej formy mamy do czynienia z setkami czy też często tysiącami plików. Trudniej w takim przypadku zarządzać taką aplikacją (nie można np. zainstalować jej przy pomocy konsoli administracyjnej), za istnieje możliwość modyfikacji pojedynczych plików (np. strony JSP) i następnie łatwe wymuszenie restartu aplikacji.

Odpowiedni wątek monitorujący pojawienia się (lub też usuniecie) aplikacji w katalogu deploy monitoruje czasy modyfikacji odpowiednich plików w archiwum. I tak, jeżeli zmienimy odpowiedni plik (w zależności od rodzaju aplikacji) to nastąpi automatyczne odinstalowanie wybranej aplikacji i jej ponowna instalacja.

Podstawowe deskryptory aplikacji
Typ aplikacji Plik deskryptora
WAR WEB-INF/web.xml
EAR META-INF/application.xml
SAR META-INF/jboss-service.xml
JAR META-INF/ejb-jar.xml
RAR META-INF/ra.xml

Typy aplikacji instalowanych przez JBossa

JBoss rozróżnia poszczególne typy aplikacji na podstawie końcówek ich nazw (uwaga, często jest to więcej niż rozszerzenie). Ponieważ każdy typ aplikacji spełnia inne funkcje w ramach infrastruktury, którą zapewnia serwer aplikacji istotne jest zachowanie odpowiedniej kolejności startowania tych aplikacji. I tak różnego rodzaje aplikacje usługowe musza zostać uruchomione przed aplikacjami biznesowymi, które mają z nich korzystać. Tak samo najpierw należy odpowiednio skonfigurować połączenia z bazą danych, zanim zaczną działać aplikacje z nich korzystające.

W poniżej tabeli znajdują się typy poszczególnych aplikacji wraz z ich krótkim omówieniem. Jednocześnie pozycja występowania na tej liście mówi o kolejności startu danej aplikacji.,

Końcówka nazwy Typ aplikacjia
.deployer
-deployer-beans.xml
Aplikacje, które pozwalają na instalację innych rodzajów aplikacji. W przypadku JBossa 5.1 znajdują się one w katalogu $JBOSS_HOME/server/PROFIL/deployers
aop
-aop.xml
Definicja aspektów stosowany do klas lub rozszerzenie czy też dodanie nowych funkcji do tych klas
.sar
-service.xml
Różnego rodzaju aplikacje usługowe, rozszerzające możliwości serwera aplikacji
-jboss-beans.xml Definicja obiektów POJO mikrokontenera
.rar Konfiguracja różnych zasobów
-ds.xml Definicja źródeł danych, używanych potem przez aplikacje w celu uzyskania dostępu do bazy danych
.har Definicja archiwum Hibernate, używanego do do dostępu do bazy danych przy użyciu Hibernate
.jar Zbiór komponentów EJB lub też po prostu biblioteka klas
.zip Serwer aplikacji sprawdzi zawartość archiwum i postara się rozpoznań typ aplikacji jaki się w nim znajduje. Potem zostanie ona zainstalowana jak aplikacja o odpowiednim typie.
.war Archiwum z aplikację webową, dostarczająca interfejs dostępny przez przeglądarkę lub też web service
.wsr Archiwum specyficzne dla JBossa, zawiera web service. Używany jeżeli dana aplikacja ma zostać zainstalowana po wszystkich archiwach WAR.
.ear Aplikacja Java EE, zawiera EJB, aplikacja WAR oraz inne biblioteki klas
.bsh Definicja usługi przy użyciu powłoki bean shell
.last Tak oznaczone aplikacje będą instalowane jako ostatnie w ramach swojego typu

Aplikacje same w sobie mogą byc zagnieżdżone. I tak aplikacja typu EAR najczęściej składa się z szeregu plików JAR z logiką biznesową, z warstwy prezentacji WAR oraz różnych innych deskryptorów. W takim przypadku JBoss stara się odnaleźć te różne aplikacji i je w ramach głównej aplikacji zainstalować. Tutaj również ma zastosowanie taka sama kolejność instalacji aplikacji jak w tabeli powyżej.

Źródła

Tags: , , , ,