как динамически сгенерировать pdf из xhtml-страницы с помощью itext + летающая тарелка с java

Я впервые использую iText + летающую тарелку с xhtml-страницами с использованием JSF 2.0 для простой формы регистрации с обычными полями ввода, такими как firstName, lastName, номер телефона и т. Д. Как только пользователь вводит все данные и нажимает "NEXT "Я должен преобразовать эту XHTML-страницу с данными пользователя в pdf. Как я могу точно получить исходный HTML-код этой страницы со всеми стилями, включенными в страницу, и преобразовать его в pdf. В настоящее время я привязываю вот так.

public void createPDF() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    HttpSession session = (HttpSession) externalContext.getSession(true);
    String url = "http://localhost:8080/MyPROJECT/faces/page1.xhtml;JSESSIONID=" + session.getId();
    try {
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(url);
    renderer.layout();
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
    response.reset();
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition","C://user//first.pdf");
    OutputStream browserStream = response.getOutputStream();
    renderer.createPDF(browserStream);
    browserStream.close();
    session.invalidate();
    } catch (Exception ex) {
       ex.printStackTrace();
    }
    facesContext.responseComplete();
}

Но это выкидывает мне это исключение.

ERROR:  'The string "--" is not permitted within comments.'
org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException: The string "--" is not permitted within comments.

Это правильный способ получить мою страницу, используя вышеуказанный URL-адрес. Получает ли этот URL-адрес мою страницу с пользовательскими данными при нажатии кнопки NEXT и конвертирует ее в pdf, или я пытаюсь ввести неправильный код. Пожалуйста, помогите мне. Примеры приветствуются.


person mdp    schedule 15.10.2012    source источник


Ответы (2)


Эти исключения больше похожи на проблему в (x) html вашего веб-сайта. В вашем html есть что-то вроде <!-- some -- comments -->?

«Летающая тарелка» выдает это исключение, потому что где-то в блоке комментариев есть --. Проверьте это и, если возможно, попробуйте без -- между <!-- и -->.

Однако, поскольку FS терпит неудачу при каждой небольшой ошибке в (X) HTML / XML (как указано в файле readme), часто бывает хорошей идеей использовать HTML Cleaner перед обработкой веб-сайта.

Вот два примера:

person ollo    schedule 15.10.2012
comment
Спасибо за быстрый ответ. Но получу ли я свою XHTML-страницу с пользовательскими данными в ней, если использую URL-адрес, как указано выше? Как распечатать этот HTMl-документ, который вводится в PDF? Как ты думаешь, мой подход правильный? - person mdp; 15.10.2012
comment
Привет, я запутался. Эти два API, которые вы упомянули, являются альтернативой flySaucer или Мне нужно использовать вместе с iText + FS? Если да, не могли бы вы предоставить информацию о том, как интегрировать Jsoup / HTMLCleaner с iText + FS - person mdp; 15.10.2012
comment
Я использую их в сочетании с FS: HTML - ›JSoup или HtmlCleaner -› FlyingSaucer - ›PDF . Jsoup или HtmlCleaner исправят многие ошибки во входном Html, которые в противном случае убили бы FS. Оба могут экранировать объекты Html - возможно, это поможет решить вашу проблему с -- в комментариях. - person ollo; 15.10.2012
comment
Привет, у меня есть четкая идея. Спасибо. Последний вопрос. Что лучше всего подходит для очистки: Jsoup или HtmlCleaner? - person mdp; 16.10.2012
comment
Лучше всего проверить оба. Если вы хотите очистить только свой Html, достаточно HtmlCleaner, но если вы выполните с ним дальнейшие действия (например, выберите тег, измените значения и т. Д.), Вам лучше использовать Jsoup. Но в целом результат должен быть таким же. - person ollo; 16.10.2012
comment
@ollo ……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………. - person mdp; 16.10.2012
comment
@ollo ...... Я могу создать PDF-файл, но мои поля HTML-формы, такие как текстовое поле, флажки и переключатели, будут проигнорированы? Вы столкнулись с этой проблемой? - person mdp; 17.10.2012
comment
Удаляются ли они из HTML чистильщиком или игнорируются FS? - person ollo; 18.10.2012
comment
Игнорируется FS.HtmlCleaner работает очень хорошо. Я вижу весь HTML, который находится в фактическом источнике, даже после использования HTML Cleaner. Итак, я попробовал другую библиотеку YaHp converter allcolor.org/YaHPConverter/. Я сейчас тестирую. Вы можете заставить все работать с FS? - person mdp; 18.10.2012
comment
Просто сделал простой тест с флажком: да, не работает. Но, возможно, этот поток может вам помочь: stackoverflow.com/questions/6133581/ - person ollo; 18.10.2012
comment
О, да. Я уже видел этот пост и смог получить все элементы HTML в моем PDF-файле. Я в порядке. Но в чем может быть проблема с FS?. Я читал кое-что, где нет поддержки AcroForm. - person mdp; 18.10.2012
comment
Я предполагаю, что просто не определен тег формы. Например. класс com.lowagie.text.html.HtmlTags не имеет определения для form. Вы можете попробовать проверить источник FS и найти там тег. - person ollo; 18.10.2012

Еще одна вещь, которую вы можете сделать, если у вас есть частичный контроль над HTML и вам нужно избегать только определенных элементов, - это следовать примеру в статья java.net, чтобы заменить нежелательные элементы в ContentCaptureServletResponse:

public String getContent(){
    writer.flush();
    String xhtmlContent = new String(contentBuffer.toByteArray());
    xhtmlContent = xhtmlContent.replaceAll("<thead>|</thead>","");
    return xhtmlContent; 
}
person peater    schedule 18.01.2013