我试图用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;
}
}
答案 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;
}
}