Fórum Ubuntu Linux - PT
Suporte Técnico => Aplicativos => Tópico iniciado por: olinto em 16 de Setembro de 2017, 20:37
-
Olá,
Gostaria de converter alguns sites para pdf. Um exemplo é o http://ecology.msu.montana.edu/labdsv/R/labs/ (http://ecology.msu.montana.edu/labdsv/R/labs/) que possui diversos subdiretórios com conteúdo dos tutoriais. Achei muita coisa para uma página apenas.
Após pesquisar na web, o que me levou mais próximo foi o http://kmkeen.com/mirror/2009-02-05-14-00-00.html (http://kmkeen.com/mirror/2009-02-05-14-00-00.html) que utilliza wget e htmldoc. Mas alguns gráficos ficaram com problemas.
Gostaria de saber se existem outras opções que não consegui encontrar.
Obrigado!
Antônio Olinto
-
Salva o site em imprimir e inves de imprimir vc coloca pdf
Enviado de meu LG-K430 usando Tapatalk
-
Salva o site em imprimir e inves de imprimir vc coloca pdf
De fato, usar Ctrl p para imprimir dependendo do site pode ser um ótima opção (e as vezes a única).
-
Caros, obrigado pela resposta.
Tentei salvar e imprimir pelos navegadores Chrome e Firefox mas eles só salvam a página, não o site. No meu exemplo eles salvaram http://ecology.msu.montana.edu/labdsv/R/labs/ e não o conjunto http://ecology.msu.montana.edu/labdsv/R/labs/lab1/lab1.html, http://ecology.msu.montana.edu/labdsv/R/labs/lab2/lab2.html, ..., /lab14.html
Estou fazendo algo errado? Não encontrei nenhuma opção como "salvar website", apenas "salvar página".
Abraços
Antônio Olinto
-
Tentei salvar e imprimir pelos navegadores Chrome e Firefox mas eles só salvam a página, não o site. No meu exemplo eles salvaram [...]
Estou fazendo algo errado? Não encontrei nenhuma opção como "salvar website", apenas "salvar página".
Então, @olinto,
Ao mencionar o Ctrl p como uma forma prática de produzir um pdf estava apenas comentando uma forma, mas ela presume a realização manual da tarefa, página por página daquilo que se queira transformar em pdf. Depois de produzidas a partir de cada link do site se pode juntar todas elas em um único documento pdf usando, por exemplo pdttk ou qualquer um dos vários outros softwares que fazem isso. Estava apenas querendo dizer que dependendo de algumas 'barreiras' que o site possa colocar, por vezes é a forma de se fazer. Não é possível apenas usando Ctrl p fazer todo o trabalho de uma vez só.
Vamos, entretanto, voltar à questão que você colocou no post inicial.
A forma descrita naquela link que você trouxe parece estar funcionando bem, não cheguei a examinar tão em detalhes, mas até onde foi possível ver sumariamente parece que está funcionando.
Como lá é dito, pressupõe existente o pacote wget, que já vem instalado por padrão no Ubuntu e ainda o pacote htmldoc, que está nos repositórios e basta instalar da forma padrão.
sudo apt install htmldoc
Pois bem, a partir daí, como descrito, é fazer:
wget -nd -mk http://example.com
htmldoc --webpage -f example.pdf example_path/toc.html example_path/*.html
Apliquei aqui usando como exemplo o site que você mencionou:
http://ecology.msu.montana.edu/labdsv/R/labs/
Só para facilitar o acesso e o agrupamento criei um diretório:
mkdir ~/ecologylabs
cd ~/ecologylabs
Então, estando dentro da pasta criada, o wget ficou:
wget -nd -mk http://ecology.msu.montana.edu/labdsv/R/labs/
Foram baixados localmente os arquivos que compõe o site e neles especialmente, que é o que mais diretamente interessa:
index.html lab12.html lab1.html lab4.html lab7.html R_ecology.html
lab10.html lab13.html lab2.html lab5.html lab8.html R_S_ecology.html
lab11.html lab14.html lab3.html lab6.html lab9.html
Daí usando o comando:
htmldoc --webpage -f teste.pdf ~/ecologylabs/*.html
Foi criado um documento pdf de 192 páginas, que me pareceu espelhar bem o que se pretendia.
Mas claro, como dito antes, não cheguei a comparar detalhadamente o resultado obtido com cada página do site.
Também do processamento resultaram as seguintes mensagens de erro:
ERR011: Unable to parse HTML element on line 139!
ERR011: Unable to parse HTML element on line 204!
ERR011: Unable to parse HTML element on line 262!
PAGES: 192
BYTES: 3370127
No post inicial está dito que "Mas alguns gráficos ficaram com problemas".
Quais seriam mais especificamente essas páginas que aparecem com problemas?
-
Outra opção para converter html em pdf pode ser o wkhtmltopdf, que igualmente trabalha por linha de comando e é bastante eficiente nisso.
https://wkhtmltopdf.org/
A versão básica se encontra diretamente nos repositórios:
sudo apt-get install wkhtmltopdf
Porém, instalar direto dos repositórios não produz a biblioteca QT patcheada para o wkhtmltopdf, o que significa algumas limitações quanto aos parâmetros que se pode aplicar (dependendo do trabalho não faz diferença) então se não quiser ter o trabalho de compilar também se pode baixar o binário já patcheado de forma completa (=static version), talvez seja a melhor opção.
cd ~/
Pode ser baixado daqui, observando-se as arquitetura 32-bit ou 64-bit
https://wkhtmltopdf.org/downloads.html
para 32-bit:
wget -c https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-i386.tar.xz
para 64-bit:
wget -c https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
Para descompactar:
tar -xvf nomedoarquivo.tar.xz
(ou simplesmente use o botão direito do mouse e faça a descompactação)
O detalhe do detalhe, descompacte diretamente no /home/$USER, pois há uma observação quanto a isso para que a execução não falhe.
Uma vez baixado é só extrair que será criado um diretório de nome wkhtmltox
Para executar é só entrar no diretório:
cd ~/wkhtmltox/bin
e então fazer de forma semelhante:
./wkhtmltopdf /path/*.html nome_arquivo.pdf
(note o ./ (ponto barra) antes do nome do executável)
Assim sendo, usando o mesmo raciocínio daquele outro software, use o wget para baixar localmente os arquivos.
Da mesma forma, para facilitar e agrupar, crie um diretório próprio:
mkdir ~/ecologylabs
cd ~/ecologylabs
De forma idêntica, baixando os arquivos que compõem o site:
wget -nd -mk http://ecology.msu.montana.edu/labdsv/R/labs/
Indo para o diretório do wkhtmltox
cd ~/wkhtmltox/bin
Executando informando o caminho onde se encontram os arquivos html baixados pelo wget:
./wkhtmltopdf ~/ecologylabs/*.html teste.pdf
Experimentei aqui e fez o processamento sem problemas e sem nenhuma mensagem de erro, produzindo um documento pdf de 134 páginas (não usei separador de páginas e tampouco numeração), que em vista sumária pareceu-me consistente.
Faça a experiência aí com o wkhtmltopdf, pode ser que resolva a questão, como visto o uso básico é bastante simples e muito semelhante àquele outro que você já experimentou e trouxe o link. Salvo engano, a qualidade dos gráficos me pareceu melhor que o outro software, mas como disse, foram observações apenas sumárias mesmo, você aí que conhece da matéria de fundo vai poder avaliar melhor.
Nessa página se encontram os parâmetros:
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
Nessa outra há um bom roteiro, também se preferir compilar diretamente, além de outras explicações úteis:
https://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf-0.9.9-doc.html
-
Caro druidaobelix
Muito obrigado por pela atenção de sua resposta.
O wkhtmltopdf deu um resultado bem melhor. Os gráficos ficaram corretos. Praticamente todos do htmldoc ficaram borrados.
No entanto a quebra de páginas do wkhtmltopdf deixa a desejar (como o próprio manual indica), ou ao menos é mais complicado,
https://ourcodeworld.com/articles/read/446/how-to-add-a-new-page-on-your-pdf-with-wkhtmltopdf (https://ourcodeworld.com/articles/read/446/how-to-add-a-new-page-on-your-pdf-with-wkhtmltopdf)
Abraços
Antonio
-
O wkhtmltopdf deu um resultado bem melhor. Os gráficos ficaram corretos. [...]
No entanto a quebra de páginas do wkhtmltopdf deixa a desejar (como o próprio manual indica), ou ao menos é mais complicado,
Pois então, @olinto,
A questão da quebra de página em determinadas circunstâncias pode mesmo ser complicada, como você apropriadamente observou no manual e como, aliás, o próprio desenvolvedor explicitamente alerta ao dizer:
Page Breaking
The current page breaking algorithm of WebKit leaves much to be desired. Basically webkit will render everything into one long page, and then cut it up into pages. This means that if you have two columns of text where one is vertically shifted by half a line. Then webkit will cut a line into to pieces display the top half on one page. And the bottom half on another page. It will also break image in two and so on. If you are using the patched version of QT you can use the CSS page-break-inside property to remedy this somewhat. There is no easy solution to this problem, until this is solved try organising your HTML documents such that it contains many lines on which pages can be cut cleanly.
Como se vê, a afirmação é direta ao dizer "leaves much to be desired (=deixa muito a desejar) e mais adiante There is no easy solution to this problem (não há solução fácil para esse problema), o que é perfeitamente compreensível. O exemplo que ele menciona é significativo.
Um website foi concebido para uma determinada finalidade que não a de estar impressa em um documento pdf, aliás, a essência do conceito html é a existência virtual cuja dinâmica se dá pelos links. Apenas não deveria ser necessário colocar uma página web num documento pdf. A página web deveria estar sempre disponível e acessível. Num mundo ideal todos deveriam ter acesso pleno e imediato à internet, tornando desnecessárias essas conversões de formatos.
Mas sabemos que isso é apenas o ideal e não o real, então aí aparecem essas soluções como o excelente wkhtmltopdf, mas aqui e ali sempre existirão algumas limitações.
No caso concreto que você apresenta não parece haver dificuldades maiores (não vi realmente em detalhes, página por página), além do que se trata de um conjunto pequeno e, se necessário, facilmente manipulável ainda que fazendo a segmentação de forma manual.
No caso do seu exemplo uma primeira característica que chama a atenção é o ordenamento (se é que isso é realmente importante), mas também facilmente contornável, bastando renomear a sequência html para ao invés de chamar lab1 lab2 lab3 etc é só adicionar um 0 (zero) antes do numeral que o processamento irá colocar na ordem numérica habitual como lab01.html lab02.html lab03.html e assim por diante. Como são poucos blocos neste caso é bastante fácil de ser feito.
Também eventualmente pode ser útil, dependendo do que se queira, usar o parâmetro --default-header que coloca no cabeçalho o título e ainda diretamente a numeração.
Algo como:
./wkhtmltopdf --default-header ~/ecologylabs/*.html teste.pdf
(duplo hífen antes do parâmetro --default-header)