Можете ли вы вставить пустые строки в уже преобразованный PDF? - PullRequest
0 голосов
/ 25 августа 2009

У меня есть ситуация, когда мне нужно увеличить пространство между таблицей и заголовком в PDF, который уже был преобразован из шаблона XSL. Мне нужно вставить адрес во вновь созданное пространство. Эта часть достаточно проста, и я могу сделать это, используя штамп и новую таблицу.

Однако я изо всех сил пытаюсь найти решение, чтобы переместить сетку вниз, чтобы освободить место.

В основном я использую FOP для создания PDF из шаблона XSL, используя код, подобный следующему:

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 голосов
/ 26 августа 2009

Кажется, что невозможно (по крайней мере из всего, что я пробовал и читал) перемещать преобразованные объекты после того, как 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 голосов
/ 26 августа 2009

Невозможно добавить «новый пробел» как таковой, но можно получить координаты объекта на странице и затем заново нарисовать этот объект где-нибудь еще. К сожалению, быстрого и простого решения не существует, и для этого вам понадобится сторонний SDK.

PDF не является форматом текстового процессора, поэтому невозможно просто добавить пару возвратов каретки, как в MS Word.

Попробуйте iText , он написан на Java и обладает приличным количеством функций для работы с PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...