2017-03-07 18 views
1

データをSqliteデータベースから取得するレポートをPDF形式で生成しようとしています.Ipdgライブラリを使用してPDFを生成しています。しかし、問題は、生成されたPDFファイルは、コンテンツの下にのみ表示されます。生成されたPDFファイルにデータベーステーブルが表示されない

1.Expenseレポート

火3月7日午後五時50分43秒に生成されたレポートGMT +05:30 2017

私はsqliteのデータベースからフェッチしていたデータは、缶を示し取得されていません誰かが私が識別することができない問題で私を助けます。データはPDFに救われなかった理由を適切にthatsの

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); 


    } 
}; 
+0

新しい文書に書き込むためにpdf writerを作成するPdfWriter.getInstance(document、new FileOutputStream(FILE)); \t \t \t \t \t \t \t \t \t \t document.open();マニフェストのパーミッションを宣言しました –

+0

@peter上記のコードではすでにpdfwriterのインスタンスを作成していますが、すでにマニフェストの外部ストレージを読み書きする権限を与えています。マニフェストで宣言しなければならない他の許可はありますか? –

+0

あなたのPDF作成コードは広範囲に広がっており、外部から与えられたデータに依存して問題を試して再現することはできません。静的テキストに基づいてPDFを作成する作業(UIイベント処理は不要)に集中するようにコードを減らしてください。 – mkl

答えて

0

テーブルが作成取得されませんでした。

は、以下の私のコードです。

+0

*データベース*テーブルが正しく作成されなかったことを意味しますか? – mkl

+0

はい、このコードはデータベースコードに問題ありませんでした。 –

関連する問題