2015-04-29 5 views
0

У меня есть приложение для Android, которое в основном представляет собой форму для ввода пользовательского ввода. Этот вход сохраняется в базе данных. Но я хочу создать pdf-файл с информацией, которую пользователь вводит и отображает, чтобы пользователь мог распечатать файл или сохранить файл на вкладке заметки Android. Каков наилучший способ сделать это. Я видел iText вокруг, но это не отображает файл. Я нашел этот код онлайн, и я проверил его, чтобы понять концепцию создания PDF. Это использует Lowagie 2.1.7Создайте, напишите и покажите файл PDF в приложении android

package com.example.sweetiean.androidpdfdemo; 

     import android.content.Intent; 
     import android.graphics.Bitmap; 
     import android.graphics.BitmapFactory; 
     import android.graphics.Color; 
     import android.net.Uri; 
     import android.os.Environment; 
     import android.support.v7.app.ActionBarActivity; 
     import android.os.Bundle; 
     import android.util.Log; 
     import android.view.Menu; 
     import android.view.MenuItem; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.Toast; 

     import com.lowagie.text.Document; 
     import com.lowagie.text.DocumentException; 
     import com.lowagie.text.Font; 
     import com.lowagie.text.HeaderFooter; 
     import com.lowagie.text.Paragraph; 
     import com.lowagie.text.Phrase; 
     import com.lowagie.text.pdf.PdfWriter; 
     import com.lowagie.text.Image; 


     import java.io.ByteArrayOutputStream; 
     import java.io.File; 
     import java.io.FileOutputStream; 
     import java.io.IOException; 




    public class MainActivity extends ActionBarActivity { 

    private Button createPDF , openPDF; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     createPDF = (Button)findViewById(R.id.button1); 
     createPDF.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       createPDF(); 
      } 
     }); 

     openPDF = (Button)findViewById(R.id.button2); 
     openPDF.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       openPdf(); 
      } 
     }); 
    } 

    public void createPDF() 
    { 
     Document doc = new Document(); 

     try { 
      String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PDF"; 

      File dir = new File(path); 
      if(!dir.exists()) 
       dir.mkdirs(); 

      Log.d("PDFCreator", "PDF Path: " + path); 

      File file = new File(dir, "demo.pdf"); 
      FileOutputStream fOut = new FileOutputStream(file); 

      PdfWriter.getInstance(doc, fOut); 

      //open the document 
      doc.open(); 

      /* Create Paragraph and S`enter code here`et Font */ 
      Paragraph p1 = new Paragraph("Hi! I am Generating my first PDF using DroidText"); 

    /* Create Set Font and its Size */ 
      Font paraFont= new Font(Font.HELVETICA); 
      paraFont.setSize(16); 
      p1.setAlignment(Paragraph.ALIGN_CENTER); 
      p1.setFont(paraFont); 

      //add paragraph to document 
      doc.add(p1); 


      Paragraph p2 = new Paragraph("This is an example of a simple paragraph"); 

    /* You can also SET FONT and SIZE like this */ 
      Font paraFont2= new Font(Font.COURIER,14.0f, Color.GREEN); 
      p2.setAlignment(Paragraph.ALIGN_CENTER); 
      p2.setFont(paraFont2); 

      doc.add(p2); 

    /* Inserting Image in PDF */ 
      /*ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      Bitmap bitmap = BitmapFactory.decodeResource(getBaseContext().getResources(), R.drawable.android); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100 , stream); 
      Image myImg = Image.getInstance(stream.toByteArray()); 
      myImg.setAlignment(Image.MIDDLE); 

      //add image to document 
      doc.add(myImg);*/ 

      //set footer 
      Phrase footerText = new Phrase("This is an example of a footer"); 
      HeaderFooter pdfFooter = new HeaderFooter(footerText, false); 
      doc.setFooter(pdfFooter); 

      Toast.makeText(getApplicationContext(), "Created...", Toast.LENGTH_LONG).show(); 

     } catch (DocumentException de) { 
      Log.e("PDFCreator", "DocumentException:" + de); 
     } catch (IOException e) { 
      Log.e("PDFCreator", "ioException:" + e); 
     } 
     finally 
     { 
      doc.close(); 
     } 
    } 

    void openPdf() 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PDF"; 

     File file = new File(path, "demo.pdf"); 

     intent.setDataAndType(Uri.fromFile(file), "application/pdf"); 
     startActivity(intent); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

И это основной вид деятельности.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<Button 
    android:id="@+id/button2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView1" 
    android:layout_marginTop="100dp" 
    android:text="Open PDF" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textView1" 
    android:layout_marginTop="44dp" 
    android:text="Generate PDF" /> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="50dp" 
    android:text="@string/hello_world" /> 

+0

Пожалуйста, поделитесь, что вы пытались – NarenderNishad

ответ

1

Я просто понял, этот вопрос был оставлен без ответа. Во всяком случае, вскоре после того, как я разместил этот вопрос, я нашел itextpdf version5, и это то, что я использовал для всех своих проектов с тех пор. С тех пор их веб-сайт был обновлен, и они действительно хорошо справляются с документацией. Вот их примерные страницы: link.

+0

Это в основном ответ только для ссылок (может быть подвержен удалению). Могу ли я предложить хотя бы процитировать соответствующие части ссылки или, что более амбициозно, написать собственный пример? –

+0

@AaronHall Это будет сложно, потому что ссылка, предоставленная OP, представляет собой страницу портала, на которой есть ссылки на сотни (тысячи?) Примеров кода. –

1

Проверить это link, он требует, чтобы загрузить банку файл. (Более описание в ссылке) .Здесь является частью кода для генерации PDF.

package com.cete.androidexamples.dynamicpdf.helloworld; 

import com.cete.dynamicpdf.*; 
import com.cete.dynamicpdf.pageelements.Label; 

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

public class DynamicPDFHelloWorld extends Activity { 
    private static String FILE = Environment.getExternalStorageDirectory() 
     + "/HelloWorld.pdf"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Create a document and set it's properties 
    Document objDocument = new Document(); 
    objDocument.setCreator("DynamicPDFHelloWorld.java"); 
    objDocument.setAuthor("Your Name"); 
    objDocument.setTitle("Hello World"); 

    // Create a page to add to the document 
    Page objPage = new Page(PageSize.LETTER, PageOrientation.PORTRAIT, 
      54.0f); 

    // Create a Label to add to the page 
    String strText = "Hello World...\nFrom DynamicPDF Generator " 
      + "for Java\nDynamicPDF.com"; 
    Label objLabel = new Label(strText, 0, 0, 504, 100, 
      Font.getHelvetica(), 18, TextAlign.CENTER); 

    // Add label to page 
    objPage.getElements().add(objLabel); 

    // Add page to document 
    objDocument.getPages().add(objPage); 

    try { 
     // Outputs the document to file 
     objDocument.draw(FILE); 
     Toast.makeText(this, "File has been written to :" + FILE, 
       Toast.LENGTH_LONG).show(); 
    } catch (Exception e) { 
     Toast.makeText(this, 
       "Error, unable to write to file\n" + e.getMessage(), 
       Toast.LENGTH_LONG).show(); 
    } 
} 
} 
2

ли это так:

import com.cete.dynamicpdf.*; 
import com.cete.dynamicpdf.pageelements.Label; 

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

public class DynamicPDFHelloWorld extends Activity { 
    private static String FILE = Environment.getExternalStorageDirectory() 
      + "/HelloWorld.pdf"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Create a document and set it's properties 
     Document objDocument = new Document(); 
     objDocument.setCreator("DynamicPDFHelloWorld.java"); 
     objDocument.setAuthor("Your Name"); 
     objDocument.setTitle("Hello World"); 

     // Create a page to add to the document 
     Page objPage = new Page(PageSize.LETTER, PageOrientation.PORTRAIT, 
       54.0f); 

     // Create a Label to add to the page 
     String strText = "Hello World...\nFrom DynamicPDF Generator " 
       + "for Java\nDynamicPDF.com"; 
     Label objLabel = new Label(strText, 0, 0, 504, 100, 
       Font.getHelvetica(), 18, TextAlign.CENTER); 

     // Add label to page 
     objPage.getElements().add(objLabel); 

     // Add page to document 
     objDocument.getPages().add(objPage); 

     try { 
      // Outputs the document to file 
      objDocument.draw(FILE); 
      Toast.makeText(this, "File has been written to :" + FILE, 
        Toast.LENGTH_LONG).show(); 
     } catch (Exception e) { 
      Toast.makeText(this, 
        "Error, unable to write to file\n" + e.getMessage(), 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

Также проверить эти ссылки. Они помогут вам выполнить ваши требования.

  1. http://www.dynamicpdf.com/Blog/post/2012/06/15/Generating-PDFs-Dynamically-on-Android.aspx

  2. https://github.com/JoanZapata/android-pdfview

  3. How to create PDFs in an Android app?

  4. Render a PDF file using Java on Android

+0

попытаться пост-код, поскольку ссылки только ответы становятся недействительными, если ссылка удалена или изменена. –

+0

@NealAhluvalia - это полная демоверсия чтения PDF, поэтому я обмениваюсь ссылкой. –

+0

Что делать, если ссылка удалена или изменена? –

1

вы найдете правильный код, который действительно работает правильно. Для создания PDF-файла, размещения некоторого содержимого в нем, сохранения и открытия вновь созданного файла.

Для этого вам нужно добавить банку iTextG к вашему проекту:

  • ИЛИ

, если вы хотите преобразовать макет или представление в формате PDF, то вы должны создать изображение из вашего макета, а затем добавить в pdf. Совершенный учебник по этому вопросу. Пройдите через этот Link. Надеюсь, это поможет вам, ребята. Благодарю вас.

для простого создания и открытия PDF:

// Метод для создания PDF-файла из текста, сохранив его затем открыть его для отображения

public void createandDisplayPdf(String text) { 

    Document doc = new Document(); 

    try { 
     String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/PDF"; 

     File dir = new File(path); 
     if(!dir.exists()) 
      dir.mkdirs(); 

     File file = new File(dir, "mypdffile.pdf"); 
     FileOutputStream fOut = new FileOutputStream(file); 

     PdfWriter.getInstance(doc, fOut); 

     //open the document 
     doc.open(); 

     Paragraph p1 = new Paragraph(text); 
     Font paraFont= new Font(Font.FontFamily.COURIER); 
     p1.setAlignment(Paragraph.ALIGN_CENTER); 
     p1.setFont(paraFont); 

     //add paragraph to document 
     doc.add(p1); 

    } catch (DocumentException de) { 
     Log.e("PDFCreator", "DocumentException:" + de); 
    } catch (IOException e) { 
     Log.e("PDFCreator", "ioException:" + e); 
    } 
    finally { 
     doc.close(); 
    } 

    viewPdf("mypdffile.pdf", "PDF"); 
} 

// Method for opening a pdf file 
private void viewPdf(String file, String directory) { 

    File pdfFile = new File(Environment.getExternalStorageDirectory() + "/" + directory + "/" + file); 
    Uri path = Uri.fromFile(pdfFile); 

    // Setting the intent for pdf reader 
    Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
    pdfIntent.setDataAndType(path, "application/pdf"); 
    pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    try { 
     startActivity(pdfIntent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(this, "Can't read pdf file", Toast.LENGTH_SHORT).show(); 
    } 
} 
Смежные вопросы