간단한 JavaFX (2.2) FXML 프로젝트를 만들었습니다. html 문자열을 다른 요소로 변환하고 iText에서 생성 한 PDF 문서의 단락에 추가하려고합니다. HTMLWorker는 더 이상 사용되지 않으므로 XMLWorker를 사용합니다.itext xmlworker with javafx htmleditor
Caused by: java.lang.NoSuchMethodError: com.itextpdf.tool.xml.html.pdfelement.NoNewLineParagraph.setMultipliedLeading(F)V
at com.itextpdf.tool.xml.html.AbstractTagProcessor.currentContentToParagraph(AbstractTagProcessor.java:268)
at com.itextpdf.tool.xml.html.Span.end(Span.java:77)
at com.itextpdf.tool.xml.html.AbstractTagProcessor.endElement(AbstractTagProcessor.java:192)
at com.itextpdf.tool.xml.pipeline.html.HtmlPipeline.close(HtmlPipeline.java:207)
at com.itextpdf.tool.xml.XMLWorker.endElement(XMLWorker.java:142)
at com.itextpdf.tool.xml.parser.XMLParser.endElement(XMLParser.java:396)
at com.itextpdf.tool.xml.parser.state.ClosingTagState.process(ClosingTagState.java:71)
at com.itextpdf.tool.xml.parser.XMLParser.parseWithReader(XMLParser.java:236)
at com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:214)
at com.itextpdf.tool.xml.XMLWorkerHelper.parseXHtml(XMLWorkerHelper.java:149)
at hmtltopdf.FXMLDocumentController.handleButtonAction(FXMLDocumentController.java:64)
... 54 more
:
그러나
StringReader in = new StringReader("<html><body><p>test</p></body></html>");
나는 자바 FX HTML 편집기 제어에 의해 생성 된 HTML 문자열을 사용하려고 할 때, 나는 다음과 같은 메시지가 나타납니다 예를 들면, 자신의 기록 간단한 HTML 문자열와 함께 작동하도록 보인다
XMLWorker에서 인식하지 못하는 html 문자열에 많은 태그가 있다고 생각합니다. HTML 편집기는 다음과 같은 html 문자열을 만듭니다.
이 경우 html 문자열을 '정리'할 수있는 방법이 있습니까? 또는 다른 HTML 편집기를 사용해야합니까? 내 샘플 프로젝트의
코드 :
//using iText 5.3.1 and XMLWorker 5.5.0
@FXML
private HTMLEditor htmlEditor;
@FXML
private void handleButtonAction(ActionEvent event) {
final Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("D:/test/loremipsum.pdf"));
document.open();
//StringReader in = new StringReader("<html><body><p>test</p></body></html>"); //this works
StringReader in = new StringReader(htmlEditor.getHtmlText()); //this does not work
try {
final Paragraph test = new Paragraph();
XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() {
@Override
public void add(final Writable w) {
if (w instanceof WritableElement) {
List<Element> elements = ((WritableElement) w).elements();
for (Element e : elements) {
test.add(e);
}
}
}
}, in);
document.add(test);
} catch (IOException | DocumentException e) {
System.out.println(e.toString());
System.out.println(e.getMessage());
}
document.close();
}
편집 :
이 <b>
, <i>
... 또는 다른 태그를 사용할 때 문제가 시작 보인다.
그래, iText 버전과 XMLWorker 버전이 항상 같아야합니다. –