2016-12-12 98 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 for iText 7預計在2017年初。 –

+2

要擴展Amedee的答案:Element-class用於重傳Html元素並在XmlWorker中定義。相當於iText7的XmlWorker目前稱爲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); 
    } 
}