你可以在已经转换的PDF中插入空行吗?
问题描述:
我有一种情况,我需要增加已经从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的页数。
任何帮助,非常感谢!
答
似乎这是不可能的(至少从我已经试过和读过的所有东西)来移动已经生成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);
这不是一个可行的解决方案,我想我会分享的情况下得到别人挂在同一个问题的回答我的问题。
答
本身不可能添加“新空间”,但可以在页面上获取对象的坐标,然后在其他地方重新绘制该对象。不幸的是,没有快速简单的解决方案,您需要第三方SDK才能完成此操作。
PDF不是一种文字处理器格式,所以不可能简单地添加几个回车符,就像在MS Word中一样。
尝试iText,它是用Java编写的,并具有相当数量的操作PDF的功能。