我有一个情况我需要增加对已经从一个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

现在看来,这是不可能的(从一切至少我曾尝试和读取)来移动变换的对象,一旦PDF已经生成了。

由于我已经利用iText和PdfStamper I类是能够插入新的页面,并插入一个新表与当前的地址信息。我没有这用下面的代码:

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

这是不是一个可行的解决方案,我想我会分享的情况下得到别人挂在同一个问题的回答我的问题。

其他提示

这是不可能增加的“新空间”本身,但可以让页面上的对象的坐标,然后重新绘制该对象在其他地方。不幸的是有没有快速和简单的解决方案,您将需要一个第三方SDK做到这一点。

PDF是不是一个字处理器格式,所以它不可能简单地添加几个回车,因为你可能在MS Word。

尝试 iText的时,它是用Java编写,并具有功能用于操纵的PDF像样的数目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top