0

我有一种情况,我需要在已经从 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 的页数后才知道我需要它。

任何帮助是极大的赞赏!

4

2 回答 2

0

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

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

试试iText,它是用 Java 编写的,并且具有相当多的处理 PDF 的功能。

于 2009-08-25T22:40:33.820 回答
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);

这不是我想通过一个可行的解决方案来回答我的问题,以防其他人被同一问题挂断。

于 2009-08-26T19:33:20.313 回答