2009-08-25 86 views
0

我有一種情況,我需要增加已經從XSL模板轉換的PDF和表頭之間的空間。 我需要在新創建的空間中插入一個地址。這個部分很簡單,我可以用一個壓模和一個新桌子來做到這一點。你可以在已經轉換的PDF中插入空行嗎?

但是,我正在努力尋找解決方案來移動網格來創造空間。

基本上我使用FOP創建使用類似下面的代碼從一個XSL模板PDF:

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

它甚至有可能訪問PDF的方式來添加新的空間?如果是這樣,我有什麼選擇?我應該提到,當時我不知道正在發生變革,我需要額外的空間。我只知道我需要它,一旦我得到PDF的頁數。

任何幫助,非常感謝!

回答

0

似乎這是不可能的(至少從我已經試過和讀過的所有東西)來移動已經生成PDF的轉換對象。

因爲我已經在使用iText和PdfStamper類,所以我能夠插入一個新頁面並插入一個新的表格以及當前的地址信息。我這樣做是用下面的代碼:

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

這不是一個可行的解決方案,我想我會分享的情況下得到別人掛在同一個問題的回答我的問題。

0

本身不可能添加「新空間」,但可以在頁面上獲取對象的座標,然後在其他地方重新繪製該對象。不幸的是,沒有快速簡單的解決方案,您需要第三方SDK才能完成此操作。

PDF不是一種文字處理器格式,所以不可能簡單地添加幾個回車符,就像在MS Word中一樣。

嘗試iText,它是用Java編寫的,並具有相當數量的操作PDF的功能。

相關問題