2011-07-13 16 views
20

Puedo generar un archivo PDF en la aplicación de Android usando iText, entonces el documento PDF se genera pero,
imagen no está incluido en el archivo PDF.cómo generar archivos PDF con imágenes en android?

+1

Qué quiere decir que desea ver archivo PDF en Android –

+1

pregunta repetida, no te parece? http://stackoverflow.com/questions/2499960/how-to-create-pdfs-in-android-sdk –

+1

Podría ser bueno fusionar las dos preguntas, ya que contienen código útil. –

Respuesta

24
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.URL; 
import java.util.Date; 

import com.itextpdf.text.Anchor; 
import com.itextpdf.text.BadElementException; 
import com.itextpdf.text.BaseColor; 
import com.itextpdf.text.Chapter; 
import com.itextpdf.text.Document; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.Element; 
import com.itextpdf.text.Font; 
import com.itextpdf.text.Image; 
import com.itextpdf.text.List; 
import com.itextpdf.text.ListItem; 
import com.itextpdf.text.Paragraph; 
import com.itextpdf.text.Phrase; 
import com.itextpdf.text.Section; 
import com.itextpdf.text.pdf.PdfImportedPage; 
import com.itextpdf.text.pdf.PdfPCell; 
import com.itextpdf.text.pdf.PdfPTable; 
import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.PdfWriter; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Environment; 
import android.widget.TextView; 

public class Main extends Activity { 

    private static String FILE = Environment.getExternalStorageDirectory()+File.separator+"firstPdf.pdf"; 
    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, 
      Font.BOLD); 
    private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12, 
      Font.NORMAL, BaseColor.RED); 
    private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16, 
      Font.BOLD); 
    private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12, 
      Font.BOLD); 
    TextView txt1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     txt1=(TextView) findViewById(R.id.textView1); 

     try { 
      Document document = new Document(); 
      PdfWriter.getInstance(document, new FileOutputStream(FILE)); 
      document.open(); 
      addMetaData(document); 
      addTitlePage(document); 
      addContent(document); 
      //createImage(); 
      document.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void addMetaData(Document document) { 
     document.addTitle("My first PDF"); 
     document.addSubject("Using iText"); 
     document.addKeywords("Java, PDF, iText"); 
     document.addAuthor("Lars Vogel"); 
     document.addCreator("Lars Vogel"); 
    } 

    private static void addTitlePage(Document document) 
      throws DocumentException { 
     Paragraph preface = new Paragraph(); 
     // We add one empty line 
     addEmptyLine(preface, 1); 
     // Lets write a big header 
     preface.add(new Paragraph("Title of the document", catFont)); 

     addEmptyLine(preface, 1); 
     // Will create: Report generated by: _name, _date 
     preface.add(new Paragraph(
       "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
       smallBold)); 
     addEmptyLine(preface, 3); 
     preface.add(new Paragraph(
       "This document describes something which is very important ", 
       smallBold)); 

     addEmptyLine(preface, 8); 

     preface.add(new Paragraph(
       "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).", 
       redFont)); 

     document.add(preface); 
     // Start a new page 
     document.newPage(); 
    } 

    private static void addContent(Document document) throws DocumentException { 
     Anchor anchor = new Anchor("ESTIMATING APP", catFont); 
     anchor.setName("ESTIMATING APP"); 

     // Second parameter is the number of the chapter 
     Chapter catPart = new Chapter(new Paragraph(anchor), 1); 

     Paragraph subPara = new Paragraph("Subcategory 1", subFont); 
     Section subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("Hello")); 

     subPara = new Paragraph("Subcategory 2", subFont); 
     subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("Paragraph 1")); 
     subCatPart.add(new Paragraph("Paragraph 2")); 
     subCatPart.add(new Paragraph("Paragraph 3")); 

     // Add a list 
     createList(subCatPart); 
     Paragraph paragraph = new Paragraph(); 
     addEmptyLine(paragraph, 5); 
     subCatPart.add(paragraph); 

     // Add a table 
     createTable(subCatPart); 

     // Now add all this to the document 
     document.add(catPart); 

     // Next section 
     anchor = new Anchor("Second Chapter", catFont); 
     anchor.setName("Second Chapter"); 

     // Second parameter is the number of the chapter 
     catPart = new Chapter(new Paragraph(anchor), 1); 

     subPara = new Paragraph("Subcategory", subFont); 
     subCatPart = catPart.addSection(subPara); 
     subCatPart.add(new Paragraph("This is a very important message")); 

     // Now add all this to the document 
     document.add(catPart); 

    } 

    private static void createTable(Section subCatPart) 
      throws BadElementException { 
     PdfPTable table = new PdfPTable(3); 

     // t.setBorderColor(BaseColor.GRAY); 
     // t.setPadding(4); 
     // t.setSpacing(4); 
     // t.setBorderWidth(1); 

     PdfPCell c1 = new PdfPCell(new Phrase("Job Name:")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 

     c1 = new PdfPCell(new Phrase("Test 001")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 

     c1 = new PdfPCell(new Phrase("")); 
     c1.setHorizontalAlignment(Element.ALIGN_CENTER); 
     table.addCell(c1); 
     table.setHeaderRows(1); 

     table.addCell("Date:"); 
     table.addCell("1.1"); 
     table.addCell(""); 
     table.addCell("Labor Rate:"); 
     table.addCell("2.2"); 
     table.addCell(""); 
     table.addCell("Labor Cost:"); 
     table.addCell("3.2"); 
     table.addCell("3.3"); 

     subCatPart.add(table); 

    } 

    private static void createList(Section subCatPart) { 
     List list = new List(true, false, 10); 
     list.add(new ListItem("First point")); 
     list.add(new ListItem("Second point")); 
     list.add(new ListItem("Third point")); 
     subCatPart.add(list); 
    } 

    private static void addEmptyLine(Paragraph paragraph, int number) { 
     for (int i = 0; i < number; i++) { 
      paragraph.add(new Paragraph(" ")); 
     } 
    } 
+8

NOTA: El desarrollador debe comprar una licencia comercial de [iTextPdf] (http://itextpdf.com/terms-of-use/) para usar la biblioteca iTextPdf en aplicaciones de código abierto. –

+4

@OctavianDamiean Ok, pero qué hacer cuando recibo una respuesta pero no tengo una buena explicación ... puedes escribirla por mí, ya que * no tienes respuesta * [OW hubieras publicado estoy seguro] sí, pero como Al ver tu experiencia, debes obtener una explicación para el mismo, estoy seguro. Por favor, ayúdame a editar la respuesta, –

+0

@RadheMohan. ¿Qué es SubCatPart? puedes agregar algunos detalles? – RobinHood

13

Aquí está el código: (explicado en las declaraciones de registro)

String path = null ; 

File file=new File("/mnt/sdcard/PDFfiles"); 

File f = new File(file, "MyPDFFILE.pdf"); 

Log.v("stage 1","store the pdf in sd card"); 

Document document = new Document(PageSize.A4, 38, 38, 50, 38); 

Log.v("stage 2","Document Created"); 

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path)); 

Log.v("Stage 3", "Pdf writer"); 

document.open(); 

Log.v("Stage 4", "Document opened"); 

document.add(new Paragraph("First Paragraph")); 

Log.v("Stage 5", "Creating Paragraph"); 

Image image = Image.getInstance ("/mnt/sdcard/images/3_5_9_0001.jpg"); 

Log.v("Stage 6", "Image path adding"); 

image.setAlignment(Image.MIDDLE| Image.TEXTWRAP); 

Log.v("Stage 7", "Image Alignments"); 

image.setBorder(Image.BOX); 

image.setBorderWidth(15); 

document.add(image); 

Log.v("Stage 8", "Image adding"); 

document.close(); 

Log.v("Stage 7", "Document Closed"); 
Cuestiones relacionadas