Ты используешь HTMLWorker
, Этот класс устарел: он больше не поддерживается, так как был заброшен в пользу XML Worker. Есть разные способы решить вашу проблему.
Создайте несколько маленьких файлов HTML вместо одного большого HTML
Я бы не создавал одну длинную таблицу для каждого сотрудника, а одну таблицу для каждого сотрудника, и представлял бы document.NewPage()
после добавления каждой таблицы. См. Ответ №2 на вопрос " Как разобрать несколько файлов HTML в один PDF-файл?".
Это некоторый Java-код (вы можете прочитать его, как если бы это был псевдокод):
public void createPdf(Employees employees) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
String css = readCSS();
for (Employee employee : employees) {
String html = createHtml(employee);
ElementList list = XMLWorkerHelper.parseToElementList(html, css);
for (Element e : list) {
document.add(e);
}
document.newPage();
}
document.close();
}
Это решение является лучшим решением с точки зрения использования памяти и процессора.
Создать один большой HTML и ввести разрывы страниц
Другим вариантом является введение разрыва страницы перед каждым рабочим столом. См. Набор новой страницы в HTML с помощью iTextSharp HTMLWorker (html to pdf)
Это не очень хорошая идея, поскольку вы создаете большой кусок данных в памяти, и эта память может быть освобождена только после рендеринга PDF. iTextSharp пытается сбросить страницы на OutputStream
так скоро, как возможно. Если вы создаете небольшие HTML-файлы и немедленно добавляете их в PDF, вы можете скорее отбрасывать байты HTML из памяти, чем раньше, и iTextSharp также сможет сбрасывать потоки содержимого на выход, освобождая память, необходимую для хранения этого содержимого.,
Важное замечание:
Очевидно, что эти ответы подразумевают, что вы поступаете правильно. То есть: выбросить свой код, который полагается на заброшенный HTMLWorker
и начать использовать XML Worker.