2009-08-25 10 views
0

J'ai une situation où j'ai besoin d'augmenter l'espace entre une table et l'en-tête sur un PDF qui a déjà été transformé à partir d'un modèle XSL. J'ai besoin d'insérer une adresse dans l'espace nouvellement créé. Cette partie est assez facile et je peux le faire en utilisant une matrice et une nouvelle table. Cependant, j'ai du mal à trouver une solution pour déplacer la grille vers le bas pour faire de l'espace.Pouvez-vous insérer des lignes vides dans un fichier PDF déjà transformé?

En fait, je me sers FOP pour créer le PDF à partir d'un modèle XSL en utilisant un code similaire à ce qui suit:

OutputStream out = new java.io.FileOutputStream(pdf); 
Driver driver = new Driver(); 
driver.setRenderer(Driver.RENDER_PDF); 
driver.setOutputStream(out); 
TransformerFactory factory = TransformerFactory.newInstance(); 
Transformer transformer = factory.newTransformer(new StreamSource(xsl)); 
StringReader xmlStream = new StringReader(xmlData); 
Source xmlSource = new StreamSource(xmlStream); 
Result res = new SAXResult(driver.getContentHandler()); 
transformer.transform(xmlSource, res); 

Est-il même possible d'accéder au PDF de manière à ajouter le nouvel espace? Si oui, quelles sont mes options? Je dois mentionner que je ne sais pas au moment où la transformation se produit que j'aurai besoin de l'espace supplémentaire. Je sais seulement que j'en ai besoin une fois que j'ai obtenu le nombre de pages du PDF.

Toute aide est grandement appréciée!

Répondre

0

Il semble qu'il n'est pas possible (du moins de tout ce que j'ai essayé et lu) de déplacer des objets transformés une fois que le PDF a déjà été généré.

Comme j'utilisais déjà iText et la classe PdfStamper, j'étais capable d'insérer une nouvelle page et d'insérer une nouvelle table avec l'adresse actuelle. Je l'ai fait avec le code suivant:

//add new page 
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(file); 
stamper.insertPage(pageNumber,reader.getPageSizeWithRotation(1)); 

//add new table with data 
BaseFont base = BaseFont.createFont(BaseFont.HELVETICA,"",BaseFont.NOT_EMBEDDED); 
over.setFontAndSize(base,fontSize); 
PdfPTable table = new PdfPTable(1); 
table.getDefaultCell().setBorder(Rectangle.NO_BORDER); 
table.addCell(data); 
table.setTotalWidth(150f); 
table.writeSelectedRows(0, -1, 73, 650, over); 

Ce n'est pas la réponse à ma question par une solution viable, je pensais que je partagerais dans d'autres cas sont accrochés sur la même question.

0

Il n'est pas possible d'ajouter un "nouvel espace" en soi, mais il est possible d'obtenir les coordonnées d'un objet sur la page, puis de ré-attirer cet objet ailleurs. Malheureusement, il n'y a pas de solution simple et rapide et vous aurez besoin d'un SDK tiers pour le faire. PDF n'est pas un format de traitement de texte, il n'est donc pas possible d'ajouter simplement un couple de retours chariot, comme vous le feriez dans MS Word.

Essayez iText, il est écrit en Java et dispose d'une quantité décente de fonctionnalités pour manipuler les fichiers PDF.

Questions connexes