Пару дней назад я задал этот вопрос: Itext PDF How To Add HTML Pre-formatted to PDF, но @ Брюно-lowagie сказал мне, чтобы следовать инструкциям на этой существующей теме: How To Add HTML Headers And Footers to a Page, я тщательно следовал инструкции, но обнаружил, что это подход работает для простых HTML колонтитулов, как:ItextPDF добавления заголовков комплекса Формат
<h1>Header Only Line</h1>
или
<h2>Footer Only Line</h2>
Но мой случай использования требует, чтобы добавить более сложные данные в верхний и нижний колонтитулы, как образы, поэтому я попытался Wi й заголовок, который имеет IMG элемент, указывающий на изображение в том же сервере, как это:
http://localhost:8080/DocGen/resources/images/main_header.jpg
я добавил начало и конец «метки», чтобы увидеть, если они получили обработаны таким образом мой заголовок был так:
<p>----Header Start---</p>
<p><img alt="" src="http://localhost:8080/DocGen/resources/images/main_header.jpg" style="height:126px; width:683px" /></p>
<p>--Header End--</p>
Но я получаю выход PDF, как это:
Отредактировано: Как вы можете видеть, что он не показывает изображение, а также не показывает мою конечную метку.
Что мне делать, чтобы успешно добавлять верхние и нижние колонтитулы с встроенными изображениями?
Большое спасибо.
P.S: Извините за неудобства, поскольку я новичок здесь, и я надеюсь, что мой вопрос ясен.
EDIT: Код, это как в другом потоке:
public class HtmlHeaderFooter {
private String DEST = null;//"results/events/html_header_footer.pdf";
private String HEADER = null;
private String FOOTER = null;
private float leftMargin;
private float rightMargin;
private float topMargin;
private float bottomMargin;
private Rectangle pageSize = null;
public class HeaderFooter extends PdfPageEventHelper {
protected ElementList header;
protected ElementList footer;
public HeaderFooter() throws IOException {
header = XMLWorkerHelper.parseToElementList(HEADER, null);
footer = XMLWorkerHelper.parseToElementList(FOOTER, null);
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
try {
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(new Rectangle(36, 832, 559, 810));
for (Element e : header) {
System.out.println("Element on header: " + e.toString());
ct.addElement(e);
}
ct.go();
ct.setSimpleColumn(new Rectangle(36, 10, 559, 32));
for (Element e : footer) {
System.out.println("Element on footer: " + e.toString());
ct.addElement(e);
}
ct.go();
} catch (DocumentException de) {
throw new ExceptionConverter(de);
}
}
}
public void createPdfAlt(String outputFile, String inputFile){
Document document = new Document(pageSize, leftMargin, rightMargin, topMargin, bottomMargin);
FileOutputStream outputStream;
try {
outputStream = new FileOutputStream(DEST);
//System.out.println("Doc: " + document.);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
writer.setPageEvent(new HeaderFooter());
document.open();
PdfContentByte cb = writer.getDirectContent();
// Load existing PDF
PdfReader reader = new PdfReader(new FileInputStream(inputFile));
PdfImportedPage page = writer.getImportedPage(reader, 1);
// document.setPageSize(reader.getPageSize(1));
// Copy first page of existing PDF into output PDF
document.newPage();
cb.addTemplate(page, 0, 0);
document.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
В моем Managed Bean я установил верхний и нижний колонтитулы, выходной_файл и так далее:
HtmlHeaderFooter htmlHeaderFooter = new HtmlHeaderFooter();
htmlHeaderFooter.setFOOTER(footerContent);
htmlHeaderFooter.setHEADER(headerContent);
//htmlHeaderFooter.setPageSize(xml2pdf.getPageSize());
htmlHeaderFooter.setPageSize(com.itextpdf.text.PageSize.A4);
htmlHeaderFooter.setLeftMargin(template2Export.getLeftMargin());
htmlHeaderFooter.setRightMargin(template2Export.getRightMargin());
htmlHeaderFooter.setTopMargin(template2Export.getSuperiorMargin());
htmlHeaderFooter.setBottomMargin(template2Export.getInferiorMargin());
htmlHeaderFooter.setDEST("salidaConHeaderAndFooter.pdf");
htmlHeaderFooter.createPdfAlt("PDFCompleto1.pdf", "test3.pdf");
EDIT 2 : Заголовок должен выглядеть так:
Если говорить о HTML код "как есть", это так:
<p>----Header Start---</p>
<p><img alt="" src="http://localhost:8080/DocGen/resources/images/main_header.jpg" style="height:126px; width:683px" /></p>
<p>--Header End--</p>
Пожалуйста, покажите свой код. – mkl
Здравствуйте @mkl Я редактировал сообщение с кодом, который я использую. Большое спасибо за ваше время. – OZWolverine
Как выглядит внешний вид заголовка html, включая изображение. – mkl