Пишите большие PDF-файлы с Java последовательно - PullRequest
1 голос
/ 03 января 2011

Я ищу библиотеку Java, которая позволяет вам писать большие PDF-файлы последовательно с минимальным объемом памяти. Большинство библиотек, на которые я смотрел, должны сначала создать документ в памяти, прежде чем вы сможете его написать.

Проблема, с которой мне приходится сталкиваться, это OutOfMemoryErrors. Было бы замечательно, если бы я мог очищать писателя программно всякий раз, когда это необходимо, например. за каждую страницу.

У кого-нибудь есть рекомендации? Мне нужно что-то с лицензией в соответствии с LGPL (не GPL или Affero GPL, которые использует iText).

Ответы [ 4 ]

3 голосов
/ 03 января 2011

Вы можете сделать это с помощью iText . Он поддерживает запись в OutputStream s .

1 голос
/ 06 января 2011

Бесплатная версия Docmosis имеет довольно открытую лицензию, поэтому она может подойти вам.Он использует шаблонный подход, который отличается от сборки из кода.Docmosis обрабатывает все документы потоковым способом, поскольку он предназначен для параллельного использования и для больших документов.Это также позволяет перенести обработку наиболее интенсивно загружаемых деталей на другой сервер.Надеюсь, это поможет.

0 голосов
/ 03 января 2011

jPod может заменять косвенные объекты и поддерживает добавочную запись.

Это все еще не оптимально, так как вам нужно "увеличение" при каждом сбросе, но лучше, чем ничего ...

EDIT

Öhhh - это один из известных примеров самоописания кода :-) Вы правы, не так уж много учебников или чего-то еще, но Javadoc довольно хорош.

  • jPod пишет инкрементно по умолчанию. См. «CosDocument.setWriteModeHint», чтобы установить полный режим.
  • Пример «CreateDoc» и «AppendPage» - это простые примеры того, как добавлять страницы. Вы можете сделать то же самое и вызывать «сохранить» каждые 10 или 100 страниц. Это должно «смягчить» все ссылки на страницы в памяти, и если они не хранятся другими ссылками, то вы можете собрать мусор.

Есть еще вопрос, как вы заполняете страницы? Также есть примеры, связанные с потоками контента (DrawText, ..). НО jPod не похож на iText, Jasper или что-то еще. Там только абстракции PDF модели. У вас нет «Layouter» или «Renderer», который создает содержимое страницы из текста, HTML или что-то в этом роде. Как ты это делаешь?

0 голосов
/ 03 января 2011

У меня действительно была та же проблема, что и у вас, друг помог мне, но он сделал это в C # и, используя API под названием GhostScriptSharp, вы должны проверить это.

Я не могу дать вамкопия кода, поскольку она защищена авторским правом, но я уверен, что она вам поможет, так как инструмент, который я считаю, построен на Java.

...