2009-08-25 4 views
0

Ich habe eine Situation, in der ich den Abstand zwischen einer Tabelle und der Kopfzeile eines PDFs, das bereits aus einer XSL-Vorlage umgewandelt wurde, vergrößern muss. Ich muss eine Adresse in den neu erstellten Raum einfügen. Dieser Teil ist einfach genug und ich kann das mit einem Stempel und einem neuen Tisch tun.Können Sie Leerzeilen in eine bereits umgewandelte PDF-Datei einfügen?

Allerdings habe ich Mühe, eine Lösung zu finden, um das Raster zu verschieben, um den Raum zu machen.

Grundsätzlich ich FOP bin mit dem PDF aus einer XSL-Vorlage Code folgenden auf die ähnlich zu erstellen:

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); 

Ist es sogar möglich, die PDF in einer Art und Weise den Zugriff auf den neuen Raum hinzufügen? Wenn ja, was sind meine Optionen? Ich sollte erwähnen, dass ich zu dem Zeitpunkt, an dem die Transformation stattfindet, nicht weiß, dass ich den zusätzlichen Platz brauchen werde. Ich weiß nur, dass ich es brauche, sobald ich eine Seitenzahl des PDFs habe.

Jede Hilfe wird sehr geschätzt!

Antwort

0

Es scheint, es ist nicht möglich (zumindest von allem, was ich versucht habe zu lesen), transformierte Objekte zu bewegen, sobald das PDF bereits generiert wurde.

Da ich bereits iText und die PdfStamper-Klasse verwendet habe, konnte ich eine neue Seite einfügen und eine neue Tabelle mit den aktuellen Adressinformationen einfügen. Ich tue dies mit dem folgenden Code:

//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); 

Dies wird durch eine tragfähige Lösung nicht die Antwort auf meine Frage ist, ich dachte, ich würde teilen, falls andere zum gleichen Thema erhalten aufgehängt.

0

Es ist nicht möglich, "neuen Raum" per se hinzuzufügen, aber es ist möglich, die Koordinaten eines Objekts auf der Seite zu ermitteln und das Objekt dann woanders neu zu zeichnen. Leider gibt es keine schnelle und einfache Lösung. Dafür benötigen Sie ein SDK von Drittanbietern.

PDF ist kein Textverarbeitungsformat, es ist also nicht möglich, einfach ein paar Zeilenumbrüche hinzuzufügen, wie es bei MS Word der Fall ist.

Versuchen Sie iText, es ist in Java geschrieben und verfügt über eine anständige Menge an Funktionen zum Bearbeiten von PDFs.

Verwandte Themen