你能在已转换的PDF中插入空行吗?

时间:2009-08-25 14:35:04

标签: pdf xslt transformation

我有一种情况需要增加表格和已经从XSL模板转换的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的页数,我才知道我需要它。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

本身不可能添加“新空间”,但可以在页面上获取对象的坐标,然后在其他地方重新绘制该对象。遗憾的是,没有快速简便的解决方案,您需要第三方SDK才能执行此操作。

PDF不是文字处理器格式,因此不可能像在MS Word中那样简单地添加几个回车。

试试iText,它是用Java编写的,具有很多用于处理PDF的功能。

答案 1 :(得分: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);

这不是我的问题的答案,我认为我会分享一个可行的解决方案,以防其他人挂在同一问题上。