Как динамически генерировать 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;
}