web-dev-qa-db-ja.com

PDFファイルをAndroidアプリで作成、書き込み、表示

Androidアプリは基本的にユーザー入力を受け入れるフォームです。この入力はデータベースに保存されますが、ユーザーが入力した情報を含むPDFファイルを作成して表示したいと思います。ユーザーがファイルを印刷したり、ファイルをAndroidメモタブ)に保存したりできるようにします。これを実行する最善の方法は何ですか。iTextを見たことがありますが、ファイルがレンダリングされません。このコードをオンラインで見つけてテストし、PDF作成の概念を理解しました。これはLowagie2.1.7を使用しています。

    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" />
5
Sweetie Anang

私はこの質問が未回答のままになっていることに気づきました。とにかく、この質問を投稿して間もなく、itexpdf version5を見つけました。それ以来、すべてのプロジェクトで使用しています。彼らのウェブサイトはその後更新されており、彼らは本当にドキュメントでうまくやっています。これが彼らのサンプルページへの リンク です。

1
Sweetie Anang

このようにしてください:

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. Androidアプリ? でPDFを作成する方法

  4. PDFファイルを使用してJava

2
Jignesh Jain

実際に正しく機能する正しいコードが見つかります。PDFファイルを作成し、その中にコンテンツを入れ、保存して、新しく作成したファイルを開くために。

このためには、プロジェクトに iTextG のjarファイルを追加する必要があります。

  • OR

レイアウトまたはビューをPDFに変換したい場合は、レイアウトから画像を作成してからpdfに追加する必要があります。これを実行する完全なチュートリアル リンク 。これが皆さんのお役に立てば幸いです。ありがとうございます。

Simple Create and Open 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();
    }
}
1

これを確認してください リンク 、jarファイルをダウンロードする必要があります(リンクの詳細な説明)。これは、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();
    }
}
}
1
Neal Ahluvalia