2016-12-12 6 views
0

Для IText 5, следующая ссылка может быть использована для поддержки HTML:HTML поддержка в колонтитул заголовок для IText 7

http://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers#1331-htmlheaderfooter.java

Для IText 7, библиотеки изменились. Кто-нибудь знает, как это сделать для iText 7?

Код, используемый в настоящее время:

protected class TableFooterEventHandler implements IEventHandler { 
    protected ElementList header; 
    protected ElementList footer; 

    public TableFooterEventHandler() throws IOException { 
     header = XMLWorkerHelper.parseToElementList(HEADER, null); 
     footer = XMLWorkerHelper.parseToElementList(FOOTER, null); 

    } 

    @Override 
    public void handleEvent(Event event) { 
     PdfDocumentEvent docEvent = (PdfDocumentEvent) event; 
     PdfDocument pdfDoc = docEvent.getDocument(); 
     Document document = new Document(pdfDoc).setTextAlignment(TextAlignment.JUSTIFIED); 
     PdfPage page = docEvent.getPage(); 
     Rectangle[] columns = { 
       new Rectangle(36, 36, 254, 770), 
       new Rectangle(305, 36, 254, 770)}; 
     document.setRenderer(new ColumnDocumentRenderer(document, columns)); 
     for(Element e : header) 
      document.add(new Paragraph(header).setFont(title ? bold : normal)); 
     PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc); 
     new Canvas(canvas, pdfDoc, new Rectangle(36, 20, page.getPageSize().getWidth() - 72, 50)).add(header); 
    } 
} 

public static void main(String[] args) throws Exception{ 
    File file = new File(DEST); 
    file.getParentFile().mkdirs(); 
    new HtmlHeaderFooter().createPdf(DEST); 
} 

public void createPdf(String filename) throws Exception{ 

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST)); 
    Document doc = new Document(pdfDoc, PageSize.A4); 
    doc.setMargins(36, 36, 72, 36); 

    pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, (new TableFooterEventHandler())); 

    for (int i = 0; i < 150; i++) { 
     doc.add(new Paragraph("Hello World!")); 
    } 
    doc.add(new AreaBreak()); 
    doc.add(new Paragraph("Hello World!")); 
    doc.add(new AreaBreak()); 
    doc.add(new Paragraph("Hello World!")); 

    doc.close(); 
} 

В строке:

for(Element e : header) 

Элемент устарел. Каково его соответствие для iText 7?

+0

html2pdf для iText 7 ожидается на начало 2017 года. –

+2

Чтобы расширить ответ Амеди: класс Element используется для отображения элемента Html и определяется в XmlWorker. Эквивалент XmlWorker для iText7 в настоящее время известен как Html2Pdf и находится в разработке. Первая версия ожидается в начале 2017 года :) –

ответ

0

Я рад сообщить, что pdfHTML дополнение для iText7 было выпущено! Чтобы преобразовать фрагмент HTML в список элементов, используйте HtmlConverter.convertToElements, что является альтернативой XMLWorkerHelper.parseToElementList.

Простой пример, когда никаких дополнительных ConverterProperties не установлены:

List<IElement> headerElements = HtmlConverter.convertToElements(html); 

После этого вы можете использовать эти элементы в любой моде вы предпочитаете, например, добавляемые в Canvas, как вы хотели бы сделать в вашем коде:

Canvas canvas = new Canvas(canvas, pdfDoc, new Rectangle(36, 20, page.getPageSize().getWidth() - 72, 50)); 
for (IElement headerElement : headerElements) { 
    // Making sure we are adding blocks to canvas 
    if (headerElement instanceof IBlockElement) { 
     canvas.add((IBlockElement)headerElement); 
    } 
}