Fortunatamente possiamo ricorrere ad uno script che fa tutto per noi. (Funziona su sitemi GNU/Linux)
Per prima cosa dobbiamo installare il pacchetto htmldoc che è un semplice comando da terminale che converte un documento in formato html in pdf. Per farlo usate il vostro gestore pacchetti!
Ora apriamo il nostro edito di testo e mettiamo lo script per scaricare il le varie pagine e convertirle in un unico documento pdf:
#!/bin/bash
#those are the urls of the pages
path=http://www.ilnomedelsito/pagine
endPath=.html
#get all the pages from the web
for i in {1..55}
do
tmp=$path$i$endPath
wget $tmp
echo "page $i ->got"
done
list=""
#create a string with all the files's name
for i in {1..55}
do
list="$list $path$i$endPath"
done
echo "all file processed"
htmldoc -f book.pdf $list --webpage
#remove the temporary html files
rm -f *.html
echo "all done"
exit 0
Ora spieghiamo un po a cosa serve il tutto:
#those are the urls of the pages
path=http://www.ilnomedelsito/pagine
endPath=.html
Queste sono due semplici variabili che identificano l'indirizzo da dove scaricare i file. Infatti, di solito questi libri hanno l'indirizzo composto da www.nome-sito.qualcosa/nome-libro/pagina-numero.html. Il nostro compito è semplicememte sostituire il numero con i vari numeri delle pagine da cui è composto il libro. (Ovviamente dovete mettere l'url giusto!)
#get all the pages from the web
for i in {1..55}
do
tmp=$path$i$endPath
wget $tmp
echo "page $i ->got"
done
Qui non si fa altro che un semplice ciclo per completare l'indirizzo con i vari numeri delle pagine identificati dalla variabile i. Nell'esempio abbiamo dalla pagina 1 alla 55, ma voi potete usare quelle che volete. Con wget poi le scharichiamo.
#create a string with all the files's name
for i in {1..55}
do
list="$list $path$i$endPath"
done
echo "all file processed"
Analogamente a prima qui creiamo una variabile che continene tutti i nomi die file che abbiamo appena scaricato.
htmldoc -f book.pdf $list --webpage
#remove the temporary html files
rm -f *.html
Gli ultimi due comandi servono per creare il pdf da tutte le pagine web scaricate (richiederà del tempo, a seconda del numero di pagine) e rimuovere le pagine html una volta finito tutto.
Ora non vi rimane altro che creare una cartella dove volete, mettere dentro il nostro script, renderlo eseguibile (comando chmod) ed eseguirlo.
Attendiamo un paio di istanti ed avremo il nostro documento in pdf che potremo stampare comodamete o farci quello che vogliamo!
ATTENZIONE: ovviamento non dovete usare questo script per cose illegali tipo distribuire il libro scaricato ai vostri amici!
ciao lorenzo. seguo il forum telefoninux anche e io e ho trovato il link nella tua firma. mi interessa molto l'articolo che hai scirtto ma credo di avere un problema: devo scaricare una guida da html.it. ma li la numerazione delle pagine è diversa: la pagina princiapale è questa: http://programmazione.html.it/guide/leggi/34/guida-c/ , mentre le pagine sono così numerate:
RispondiEliminahttp://programmazione.html.it/guide/lezione/1149/introduzione/
http://programmazione.html.it/guide/lezione/1150/la-storia-del-c/
eccetera eccetera eccetera.. sai darmi una mano?
wow allora c'è qualcuno che legge le firme! :)
RispondiEliminaAllora sarà un po incasinato!
per la prima pagina puoi fare una semplice variabile indice=http://programmazione.html.it/guide/leggi/34/guida-c/ ed aggiungerla all'inizio di list prima di fare il for (in pratica al posto di fare list="" fai list=$indice)
Per gli altri puoi fare il for che parte da 1149 e arriva a 1198 poi dovresti sostituire la variabile endPath con i vari nomi e qui sta il problema!
Dando una rapida occhiata ho notato che sono i nomi dei capitoli con i - al posto degli spazi. Quindi io mi farei un file di testo copiandoci dentro il numero e il titolo dei vari capitoli e mettendoci i trattini (è un po noioso ma puoi usare la funzione "sostituisci" che c'è in tutti gli editor)
poi dentro al for si potrebbe andare a scegliere la riga esatta con qualcosa tipo grep ^$num nomefile.
Peró non sono molto sicuro, dopo provo a fare qualche esperimento e ti faccio sapere ;)
rieccomi! Ho goichicchiato con gli script e dovrei aver trovato una soluzione.
RispondiEliminaFai un file di testo come ti avevo detto prima con i nomi messi così (attento a togliere le maiuscole i ++ e ? ecc):
1 introduzione
2 la-storia-del-c
...
18 listruzione-condizionale
...
50 la-sintassi-di-una-classe-derivata
e lo salvi nella stessa cartella poi fai il primo ciclo for cosí:
< code >
for i in {1149..1198}
do
let "n=$i-1148"
endPath=`grep -w ^$n nome-del-file`
#attento al carattere ` detto back-quote lo trovi con AltGr+'
if [ $n -le 10 ]; then
endPath=$endPath{endPath:2}
else
endPath=$endPath{endPath:3}
fi
tmp=$path$i$endPath
wget $tmp
echo "page $i ->got"
done
< /code >
poi metti il secondo for ricordando di sostituire gli indici!
L'ho testato solo su un file di prova senza scaricare le cose però credo funzioni. Stai attento all'output e se da qualche errore sul wget controlla bene il nome.
Lascio a te il divertimento di capire cosa fa il pezzo di script, se hai domande fai pure!