Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/08/2011, 02:23
Erickvk
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 6 meses
Puntos: 8
XFA PDF itext

Tengo un problema al generar un PDF en java con el protocolo XFA 2.4, el problema es, si en el formulario XFA solo hay textos no hay problema pero si intento añadir una imagen, esta imagen no aparece.

Estoy usando este metodo para añadir la imagen. He probado varias maneras y no funciona. Si el PDF no tiene este protocolo si muestra la imagen.

public void anadirImagen(String PsRutaPDFOrigen, String PsRutaPDFDestino)
{
try
{
/**/
//Método 6: Change Image button field in pre-existing PDF
// Ver: http://threebit.net/mail-archive/ite.../msg03174.html
{
PdfReader pdf = new PdfReader(PsRutaPDFOrigen);
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream(PsRutaPDFDestino));
com.itextpdf.text.pdf.PdfWriter writer = stp.getWriter();
com.itextpdf.text.Image img = com.itextpdf.text.Image.getInstance("C:/Logalty/Pruebas/imagen.jpg");
AcroFields af = stp.getAcroFields();
//AcroFields.Item item = af.getFieldItem("Ordenes01[0].ImageField1[0]");

Set<String> objSetCampos = af.getFields().keySet();

for (String sNombreCampo : objSetCampos)
{
System.out.println(" Tratando el campo: " + sNombreCampo + " - " + af.getField(sNombreCampo) + " - " + af.getFieldType(sNombreCampo) );

AcroFields.Item item = af.getFieldItem(sNombreCampo);

PdfDictionary dic = (PdfDictionary)item.getWidget(0);

dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.AP));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.N));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.RESOURCES));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.XOBJECT));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.FRM));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.RESOURCES));
dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.XOBJECT));

dic = (PdfDictionary)PdfReader.getPdfObject(dic.get(PdfN ame.IMAGE));

com.itextpdf.text.pdf.PdfObject obj = dic.get((PdfName)dic.getKeys().iterator().next());
if (obj.isIndirect())
{
PdfDictionary tg = (PdfDictionary)PdfReader.getPdfObject(obj);
PdfName type = (PdfName)PdfReader.getPdfObject(tg.get(PdfName.SUB TYPE));
if (PdfName.IMAGE.equals(type))
{
PdfReader.killIndirect(obj);
com.itextpdf.text.Image maskImage = img.getImageMask();
if (maskImage != null)
writer.addDirectImageSimple(maskImage);
writer.addDirectImageSimple(img, (com.itextpdf.text.pdf.PRIndirectReference)obj);
}
}
} // for
stp.close();
}



} // try

catch (IOException e)
{
e.printStackTrace();
}
catch (DocumentException e)
{
e.printStackTrace();
}

} // public void anadirImagen(String PsRutaPDFOrigen, String PsRutaPDFDestino)

Muchas gracias por las molestias.

Última edición por Erickvk; 16/08/2011 a las 02:42