数据库表未显示在生成的PDF文件中

时间:2017-03-07 07:19:07

标签: android pdf itext itextg

我正在尝试生成PDF格式的报告,其中数据来自Sqlite Database。我使用itextg库生成PDF。但问题是,生成的pdf文件仅显示在内容之下。

  

1.费用报告

     

报告于2007年3月7日17:50:43 GMT +05:30 2017年生成

我从sqlite数据库中获取的数据未显示有人可以帮我解决我无法识别的问题。

以下是我的代码:

public class GenerateReport extends Activity implements OnClickListener {

int date1, date2;
Cursor c;

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);
private static String FILE;
Button bpdf;
int counter = 0;
static ArrayList<String> category; 
static ArrayList<String> mode;
static ArrayList<Integer> amount;
static ArrayList<String> date;

View backg;
// You can access the static variables from nonstatic methods


private TextView text_date1, text_date2,tv_date1,tv_date2;
private DatePicker date_picker1, date_picker2;
private Button bstart_date, bend_date;

private int year1, year2;
private int month1, month2;
private int day1, day2;

static final int DATE_DIALOG_ID1 = 100;
static final int DATE_DIALOG_ID2 = 200;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.generate_report);
    backg = findViewById(R.drawable.words_bgred);
    loadPreference();
    if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {
        // sd card mounted
    }

    File direct = new File(Environment.getExternalStorageDirectory()
            + "/ExpenseManager");

    if (!direct.exists()) {
        if (direct.mkdir()) {
            // directory is created;
        }

    }

    bpdf = (Button) findViewById(R.id.bpdf_gen);
    bpdf.setOnClickListener(this);
    bpdf.setEnabled(false);



    setCurrentDate();
    addButtonListener1();
    setEndDate();
    addButtonListener2();


}



private static void addContent(Document document) throws DocumentException {

    Anchor anchor = new Anchor("Expense Report", catFont);
    anchor.setName("Expense Report");


    Chapter catPart = new Chapter(new Paragraph(anchor), 1);

    Paragraph paragraph = new Paragraph();
    paragraph.add(new Paragraph("Report generated on " + new Date(),
            smallBold));

    addEmptyLine(paragraph, 3);

    catPart.add(paragraph);


    createTable(catPart);


    document.add(catPart);

    Log.e("meta", "content");

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
finish();

}


private void vibrate(int ms) {
    ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(ms);
}

private static void createTable(Section catPart) throws BadElementException {
    PdfPTable table = new PdfPTable(4);


    for (int i = 0; i < category.size(); i++) {
        Log.e("category...", category.get(i));
        Log.e("mode...", mode.get(i));
        Log.e("amt...", "amt" + amount.get(i));
        Log.e("date2...", "date" + date.get(i));
    }

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

    c1 = new PdfPCell(new Phrase("Amount Spent (Rs)"));
    c1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(c1);

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

    c1 = new PdfPCell(new Phrase("Payment Mode"));
    c1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(c1);

    table.setHeaderRows(1);

    for (int i = 0; i < category.size(); i++) {
        table.addCell(category.get(i));
        table.addCell(amount.get(i) + "");
        table.addCell(date.get(i));
        table.addCell(mode.get(i));

    }

    catPart.add(table);
    Log.e("meta", "table");

}

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

@Override
public void onClick(View arg0) {

//  vibrate(50);
    // TODO Auto-generated method stub
    try {
        category = new ArrayList<String>();
        mode = new ArrayList<String>();
        amount = new ArrayList<Integer>();
        date = new ArrayList<String>();

        if (date1 > date2) {
            Toast.makeText(getApplicationContext(),
                    "Start Date should be less than End Date",
                    Toast.LENGTH_LONG).show();
            Log.e("date1", date1 + " " + date2);

        }

        else {

            DbClass dc = new DbClass(this);
            dc.open();
            c = dc.showResultInPdf(date1, date2);
            for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {


                category.add(c.getString(1));
                mode.add(c.getString(4));
                amount.add(c.getInt(2));




                String change = c.getString(3);

                change = change.substring(0, 8);

                Log.e("change", change);
                date.add(change);

            }


            dc.close();
            Toast.makeText(
                    getApplicationContext(),
                    "Pdf Report Generated and saved in \n "
                            + Environment.getExternalStorageDirectory()
                                    .getAbsolutePath() + "/ExpenseManager",
                    Toast.LENGTH_LONG).show();
            final Calendar calendar = Calendar.getInstance();

            int year_current = calendar.get(Calendar.YEAR);
            int month_current = calendar.get(Calendar.MONTH) + 1;
            int day_current = calendar.get(Calendar.DAY_OF_MONTH);
            String print = day_current + "-" + month_current + "-"
                    + year_current;

            savePreference();
            FILE = Environment.getExternalStorageDirectory()
                    + "/ExpenseManager/ExpenseManager" + " " + print + "("
                    + counter + ")" + ".pdf";
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(FILE));
            document.open();

            addContent(document);
            document.close();

        }

    }

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

}

private void savePreference() {
    counter++;
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 0);
    Editor editor = sp.edit();
    editor.putInt("count", counter);
    editor.commit();

}

private void loadPreference() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 0);
    counter = sp.getInt("count", 0);

}


public void setCurrentDate() {

    text_date1 = (TextView) findViewById(R.id.text_date1);
    tv_date1 = (TextView) findViewById(R.id.date_label1);
    date_picker1 = (DatePicker) findViewById(R.id.date_picker1);

    final Calendar calendar = Calendar.getInstance();

    year1 = calendar.get(Calendar.YEAR);
    month1 = calendar.get(Calendar.MONTH);
    day1 = calendar.get(Calendar.DAY_OF_MONTH);


    text_date1.setText(new StringBuilder()

            .append(day1).append("/").append(month1 + 1).append("/")
            .append(year1).append(" "));


    date_picker1.init(year1, month1, day1, null);
    String s = new StringBuilder().append(year1).append(month1 + 1)
            .append(day1).toString();


    date1 = Integer.parseInt(s);


}


public void setEndDate() {

    text_date2 = (TextView) findViewById(R.id.text_date2);
    tv_date2 = (TextView) findViewById(R.id.date_label2);
    date_picker2 = (DatePicker) findViewById(R.id.date_picker2);

    final Calendar calendar = Calendar.getInstance();

    year2 = calendar.get(Calendar.YEAR);
    month2 = calendar.get(Calendar.MONTH);
    day2 = calendar.get(Calendar.DAY_OF_MONTH);

    // set current date into textview
    text_date2.setText(new StringBuilder()
            // Month is 0 based, so you have to add background1
            .append(day2).append("/").append(month2 + 1).append("/")
            .append(year2).append(" "));

    // set current date into Date Picker
    date_picker2.init(year2, month2, day2, null);

    String s = new StringBuilder().append(year2).append(month2 + 1)
            .append(day2).toString();


    date2 = Integer.parseInt(s);


}

public void addButtonListener1() {

    bstart_date = (Button) findViewById(R.id.bstart_date);

    bstart_date.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            showDialog(DATE_DIALOG_ID1);

        }

    });

}

public void addButtonListener2() {

    bend_date = (Button) findViewById(R.id.bend_date);
    bend_date.setEnabled(false);

    bend_date.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            showDialog(DATE_DIALOG_ID2);

        }

    });
}

@Override
protected Dialog onCreateDialog(int id) {

    if (id == DATE_DIALOG_ID1) {
        return new DatePickerDialog(this, datePickerListener1, year1,
                month1, day1);
    }

    else if (id == DATE_DIALOG_ID2) {
        return new DatePickerDialog(this, datePickerListener2, year2,
                month2, day2);
    }
    return null;

}

private DatePickerDialog.OnDateSetListener datePickerListener1 = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        year1 = selectedYear;
        month1 = selectedMonth + 1;
        day1 = selectedDay;

        // set selected date into Text View
        text_date1.setText(new StringBuilder().append(day1).append("/")
                .append(month1).append("/").append(year1).append(" "));
        text_date1.setVisibility(View.VISIBLE);
        tv_date1.setVisibility(View.VISIBLE);
        // set selected date into Date Picker
        date_picker1.init(year1, month1, day1, null);
        String s = year1 + "" + (month1 < 10 ? ("0" + month1) : (month1))
                + "" + (day1 < 10 ? ("0" + day1) : (day1));


        date1 = Integer.parseInt(s);

        bend_date.setEnabled(true);

    }
};

private DatePickerDialog.OnDateSetListener datePickerListener2 = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        year2 = selectedYear;
        month2 = selectedMonth + 1;
        day2 = selectedDay;


        text_date2.setText(new StringBuilder().append(day2).append("/")
                .append(month2).append("/").append(year2).append(" "));
        text_date2.setVisibility(View.VISIBLE);
        tv_date2.setVisibility(View.VISIBLE);

        date_picker2.init(year2, month2, day2, null);
        String s = year2 + "" + (month2 < 10 ? ("0" + month2) : (month2))
                + "" + (day2 < 10 ? ("0" + day2) : (day2));

        date2 = Integer.parseInt(s);


        bpdf.setEnabled(true);


    }
};

1 个答案:

答案 0 :(得分:0)

表格未正确创建,这就是数据未保存到pdf中的原因。