用itextg android填写表格pdf

时间:2014-05-31 18:42:36

标签: android pdf itextg

我试图用itextg 5.5.1填写pdf表格,我不能。代码创建一个新的pdf,但它没有填写。 它是一个使用acrobat的pdf创建者,只有3个字段。 问题是当我制作de AcrobFields form = stamper.getfields();表格没有字段。 使用旧的verison 5.5.0 on itextg生成一个新的pdf,其中填写了所有字段。

你能帮帮我吗? 我把代码放在这里:

Package com.example.gnenerarpdf;



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

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

    private final static String NOMBRE_DIRECTORIO = "MiPdf";
    private final static String NOMBRE_DOCUMENTO = "prueba3.pdf";
    private final static String ETIQUETA_ERROR = "ERROR";
    private final static String INPUTFILE="prototipo.pdf";
    private static String OUTPUTNAME="prototiporelleno.pdf";

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

        // Generaremos el documento al hacer click sobre el botón.
        findViewById(R.id.btnGenerar).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        // Creamos el documento.
        //Document documento = new Document();



        try {

            // Creamos el fichero con el nombre que deseemos.
            //File f = crearFichero(NOMBRE_DOCUMENTO);
             PdfReader reader;
             PdfStamper stamper;
            File file=crearFichero(INPUTFILE);

            String ruta=file.getAbsolutePath();         
              reader = new PdfReader(ruta);
              OUTPUTNAME=file.getParentFile()+"/"+"prototiporelleno1.pdf";


              stamper = new PdfStamper(reader, new FileOutputStream (OUTPUTNAME));

              AcroFields form = stamper.getAcroFields();
              form.setField("Nombre", "pepe");
              form.setField("Apellidos", "rodriguez hernandez");
              form.setField("Fecha", "15/05/14");

             stamper.close(); 

             reader.close();

              Toast.makeText(this, "Pdf generated", Toast.LENGTH_LONG).show();


        } catch (IOException e) {

            Log.e(ETIQUETA_ERROR, e.getMessage());

        } catch (com.itextpdf.text.DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {

            // Cerramos el documento.

        }

    }

    /**
     * Crea un fichero con el nombre que se le pasa a la función y en la ruta
     * especificada.
     * 
     * @param nombreFichero
     * @return
     * @throws IOException
     */
    public static File crearFichero(String nombreFichero) throws IOException {
        File ruta = getRuta();
        File fichero = null;
        if (ruta != null)
            fichero = new File(ruta, nombreFichero);
        return fichero;
    }

    /**
     * Obtenemos la ruta donde vamos a almacenar el fichero.
     * 
     * @return
     */
    public static File getRuta() {

        // El fichero será almacenado en un directorio dentro del directorio
        // Descargas
        File ruta = null;
        if (Environment.MEDIA_MOUNTED.equals(Environment
                .getExternalStorageState())) {
            ruta = new File(
                    Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                    NOMBRE_DIRECTORIO);

            if (ruta != null) {
                if (!ruta.mkdirs()) {
                    if (!ruta.exists()) {
                        return null;
                    }
                }
            }
        } else {
        }

        return ruta;
    }
}

1 个答案:

答案 0 :(得分:0)

对不起,我没有深入研究您的代码,但我确信这个简单的代码会对您有所帮助。它已经过测试并且有效。 视图只有2个文本字段和1个按钮。检查名称以使其匹配。另外,查看目录的名称(在我的情况下为/ bbbPDF)。 祝你好运!

package [...]
import [...]
public class MainActivity extends Activity {

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

    // Definimos el comportamiento del boton
    Button btn = (Button) findViewById(R.id.button_createPDF);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(v.getContext(), "Guardando...",
                    Toast.LENGTH_SHORT).show();

            // Recoger datos que el usuario ha introducido
            String nombre = ((EditText) findViewById(R.id.editText_nombre))
                    .getText().toString();
            String apellidos = ((EditText) findViewById(R.id.editText_apellidos))
                    .getText().toString();

            String src = Environment.getExternalStorageDirectory()
                    + "/bbbPDF/correos-form-demo.pdf";
            String dst = Environment.getExternalStorageDirectory()
                    + "/bbbPDF/correos-form-demo-filled-in.pdf";

            try {
                manipulatePDF(src, dst, nombre, apellidos);
            } catch (Exception e) {
                e.printStackTrace();
            }

            Toast.makeText(v.getContext(), "Guardado", Toast.LENGTH_LONG)
                    .show();

        }

        private void manipulatePDF(String src, String dst, String nombre,
                String apellidos) throws IOException, DocumentException {
            PdfReader reader = new PdfReader(src);
            PdfStamper stamper = new PdfStamper(reader,
                    new FileOutputStream(dst));
            AcroFields form = stamper.getAcroFields();

            form.setField("text_nombre", nombre);
            form.setField("text_apellidos", apellidos);

            stamper.close();
            reader.close();

        }

    });
}

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

}