Não seria legal se o modelo de imagem do Android se inspirasse no Qt? A Qt estabeleceu que gerar PDF ou SVG pode ser tão simples quanto redirecionar o mesmo código usado para desenhar na tela. Observe a derivação de QPrinter, QSvgGenerator e QWidget de QPaintDevice para o padrão.
Calaf
1
O mesmo no iOS. A geração de PDF é incorporada.
Fabian Zeindl
2
Acredito que Kit Kat tenha um recurso para gerar PDF, mas não sei se isso é compatível com versões anteriores. Tenho postado uma opção abaixo e as seguintes listas de sites várias opções que vão desde comerciais para livre: stefan.fenz.at/creating-pdfs-on-android-an-evaluation
IcedDante
5
Ridículo que isso foi fechado como "fora de tópico".
Joe Coder
2
Por que esta postagem foi fechada? O Stackoverflow é muito exigente quanto ao seu escopo; Essa pergunta tem 175.000 visualizações. Como recurso de codificação, este site deve permitir coisas hiper-comuns como essa, as regras precisam ser alteradas. Eu o sinalizei para reabrir, espero que outros votem também.
Albert Renshaw
Respostas:
155
Se alguém quiser gerar PDFs no dispositivo Android, veja como fazê-lo:
// open a new documentPrintedPdfDocument document =newPrintedPdfDocument(context,
printAttributes);// start a pagePage page = document.startPage(0);// draw something on the pageView content = getContentView();
content.draw(page.getCanvas());// finish the page
document.finishPage(page);...// add more pages...// write the document content
document.writeTo(getOutputStream());//close the document
document.close();
Um truque para criar um PDF com recursos complexos é criar uma atividade fictícia com o layout xml desejado. Em seguida, você pode abrir essa atividade fictícia, tirar uma captura de tela programaticamente e converter essa imagem em pdf usando esta biblioteca . Obviamente, existem limitações como não poder rolar, não mais que uma página, mas para um aplicativo limitado isso é rápido e fácil. Espero que isso ajude alguém!
trabalhou para mim. foi uma implementação simples.
TharakaNirmana
isso é uma solução alternativa legal
Kumar Saurabh
Este comentário me aponta na direção certa. No entanto: 1. você não precisa iniciar uma atividade para tirar uma captura de tela! você pode apenas inflar um layout xml no tempo de execução e convertê-lo em um bitmap, como sugerido aqui ; Dito isto, você pode gerar várias páginas com diferentes layouts. A rolagem não é suportada como foi dito, mas você pode implementar uma lista usando, por exemplo, um layout linear.
precisa saber é o seguinte
11
Não é fácil encontrar uma solução completa do problema de uma conversão arbitrária de HTML para PDF com letras em inglês no Android. Eu testo-o para letras unicode russas.
Usamos três bibliotecas:
(1) Jsoup (jsoup-1.7.3.jar) para uma conversão de HTML para XHTML,
O difícil problema é exibir letras russas em PDF usando a biblioteca iTextPDF XMLWorker. Para isso, devemos criar nossa própria implementação da interface FontProvider:
Atualização Eu tentei a biblioteca. Funciona bem com gerações simples de pdf (fornece métodos para adicionar texto, linhas, retângulos, bitmaps, fontes). O único problema é que o PDF gerado é armazenado em uma String na memória, isso pode causar problemas de memória em documentos grandes.
Alguém pode me dizer o que o Android PDF Writer não pode fazer, que o "itext" pode?
M. Usman Khan
1
Não mantido !! Última atualização: 14/12/2015
Mahdi Alkhatib 27/03
2
O PDFJet oferece uma versão de código aberto de sua biblioteca que deve ser capaz de lidar com qualquer tarefa básica de geração de PDF. É uma solução puramente baseada em Java e é considerada compatível com o Android. Existe uma versão comercial com alguns recursos adicionais que não parecem muito caros.
Tarde, mas relevante para solicitar e espero que útil. Se você estiver usando um serviço externo (como sugerido na resposta do CommonsWare), o Docmosis possui um serviço em nuvem que pode ajudar - transferindo o processamento para um serviço em nuvem que realiza o processamento pesado. Essa abordagem é ideal em algumas circunstâncias, mas é claro que depende de estar conectado à rede.
Você também pode usar a biblioteca PoDoFo . O objetivo principal é que seja publicado sob LGPL. Como está escrito em C ++, você deve compilá-lo usando o NDK e escrever o lado C e o wrapper Java. Algumas bibliotecas de terceiros podem ser usadas no projeto OpenCV . Também no projeto OpenCV, você pode encontrar o android.toolchain.cmakearquivo, que o ajudará na geração Makefile.
Respostas:
Se alguém quiser gerar PDFs no dispositivo Android, veja como fazê-lo:
fonte
Se você estiver desenvolvendo para dispositivos com API nível 19 ou superior, poderá usar o PrintedPdfDocument incorporado: http://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
fonte
Um truque para criar um PDF com recursos complexos é criar uma atividade fictícia com o layout xml desejado. Em seguida, você pode abrir essa atividade fictícia, tirar uma captura de tela programaticamente e converter essa imagem em pdf usando esta biblioteca . Obviamente, existem limitações como não poder rolar, não mais que uma página, mas para um aplicativo limitado isso é rápido e fácil. Espero que isso ajude alguém!
fonte
Não é fácil encontrar uma solução completa do problema de uma conversão arbitrária de HTML para PDF com letras em inglês no Android. Eu testo-o para letras unicode russas.
Usamos três bibliotecas:
(1) Jsoup (jsoup-1.7.3.jar) para uma conversão de HTML para XHTML,
(2) iTextPDF (itextpdf-5.5.0.jar),
(3) XMLWorker (xmlworker-5.5.1.jar).
O difícil problema é exibir letras russas em PDF usando a biblioteca iTextPDF XMLWorker. Para isso, devemos criar nossa própria implementação da interface FontProvider:
Aqui, usamos a fonte padrão do Android Droid Sans, localizada na pasta do sistema:
fonte
Um pouco atrasado e eu ainda não o testei, mas outra biblioteca que está sob a licença BSD é o Android PDF Writer .
Atualização Eu tentei a biblioteca. Funciona bem com gerações simples de pdf (fornece métodos para adicionar texto, linhas, retângulos, bitmaps, fontes). O único problema é que o PDF gerado é armazenado em uma String na memória, isso pode causar problemas de memória em documentos grandes.
fonte
O PDFJet oferece uma versão de código aberto de sua biblioteca que deve ser capaz de lidar com qualquer tarefa básica de geração de PDF. É uma solução puramente baseada em Java e é considerada compatível com o Android. Existe uma versão comercial com alguns recursos adicionais que não parecem muito caros.
fonte
Tarde, mas relevante para solicitar e espero que útil. Se você estiver usando um serviço externo (como sugerido na resposta do CommonsWare), o Docmosis possui um serviço em nuvem que pode ajudar - transferindo o processamento para um serviço em nuvem que realiza o processamento pesado. Essa abordagem é ideal em algumas circunstâncias, mas é claro que depende de estar conectado à rede.
fonte
Você também pode usar a biblioteca PoDoFo . O objetivo principal é que seja publicado sob LGPL. Como está escrito em C ++, você deve compilá-lo usando o NDK e escrever o lado C e o wrapper Java. Algumas bibliotecas de terceiros podem ser usadas no projeto OpenCV . Também no projeto OpenCV, você pode encontrar o
android.toolchain.cmake
arquivo, que o ajudará na geraçãoMakefile
.fonte