How to generate different types of reports using S

2019-03-31 12:02发布

问题:

I am developing one android application in which I need to generate different types of reports in various format. I want to generate reports in PDF, XLS, DOC and Text File. All the data are stored in SQLite database. Please guide me how to implement it in android.

回答1:

Hi you can generate PDF reports by using the following code

   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(" "));
    }
}

You can check this link for creating XLS reports.