Как динамически генерировать 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 мою страницу с данными пользователя по нажатию кнопки "СЛЕДУЮЩАЯ" и конвертирует ее в pdf, или я пытаюсь использовать неправильный код. Пожалуйста, помогите мне. Примеры приветствуются.

2 ответа

Решение

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

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

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

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

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

public String getContent(){
    writer.flush();
    String xhtmlContent = new String(contentBuffer.toByteArray());
    xhtmlContent = xhtmlContent.replaceAll("<thead>|</thead>","");
    return xhtmlContent; 
}
Другие вопросы по тегам