2010-11-24 6 views
2

J'ai un ensemble de modèles d'album photo PDF (ils ont des carrés vides où le texte et les photos devraient disparaître). Mon besoin est d'utiliser ces modèles pour générer des albums réels.Créer par programme des albums photo PDF

Mon plan était d'utiliser iText et Java. Je voudrais envoyer à l'application un tableau de toutes les URL d'image à utiliser. Je saurai exactement où les images doivent être placées sur les modèles et utiliser le positionnement absolu pour les placer. Je me demandais simplement s'il y avait un moyen plus simple ou plus propre de le faire - même si cela signifie utiliser une langue différente? Une fois les fichiers PDF générés, ils sont automatiquement envoyés aux imprimantes qui en ont besoin pour être PDF.

Merci

Répondre

1

Je pense que cela pourrait se faire dans de nombreuses langues assez facilement (même un script shell) en utilisant ImageMagick.

0

Il n'est pas clair si le texte est enveloppé dans les photos. En tout cas je regarderais Apache-FOP. Je l'ai beaucoup utilisé - il pourrait prendre un peu de personnalisation.

0
PdfReader reader = new PdfReader("template.pdf"); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output.pdf")); 

PdfContentByte content = stamper.getOverContent(1); // first page == 1 

Image image = Image.createInstance("someImage.png"); 
image.setAbsolutePosition(x, y); 
image.setAbsoluteHeight(hei); 
image.setAbsoluteWidth(wid); 

content.addImage(image); 

// instead of absolutely positioning the image, you can do: 
//content.addImage(image, wid, 0f, 0f, hei, x, y); 
// that's a transformation matrix, you can skew, rotate, scale, etc. 

stamper.close(); 

Si vous ne connaissez pas l'emplacement exact, vous avez plusieurs options.

1) Remplacer une image existante.

Avec cette option, vous pouvez réellement faire dépasser un peu le modèle, utiliser l'alpha blending, etc. Fais envie. Vous pourriez faire la même chose avec le code ci-dessus si vous avez utilisé stamper.getUnderContent(1) et construit votre modèle avec un fond transparent. Je viens de répondre à un replace an image question qui devrait aider sur ce front.

La nouvelle image héritera de tout l'état graphique de l'image d'espace réservé. x, y, wid, hei, groupes de contenu optionnels, transparence, toutes sortes de choses.

2) Ajoutez une annotation (les champs sont faciles d'accès) au modèle dans Acrobat (ou avec iText je suppose) et utilisez RECT pour fournir x, y, wid, hei pour le code ci-dessus.

// given the above stamper 
AcroFields fields = stamper.getAcroFields(); 
PdfDictionary replaceAnnot = fields.getFieldItem("ReplaceMe").getMerged(0); 

//we can remove the field from the PDF without breaking the info in replaceAnnot. 
fields.removeField("ReplaceMe"); 

// rects are laid out [llx, lly, urx, ury] 
PdfArray rect = replaceAnnot.getAsArray(PdfName.RECT); 
float x = rect.getAsNumber(0).floatValue(); 
float y = rect.getAsNumber(1).floatValue(); 
float width = rect.getAsNumber(2).floatValue() - x; 
float height = rect.getAsNumber(3).floatValue() - y; 

Envoyez ces coordonnées au code image ci-dessus et vous êtes prêt à partir.

Questions connexes