javascript中的itext页眉/页脚
我在javascript环境中工作。我可以导入jar文件并使用itext,但所有内容都必须用js编写。对于使用itext的基本PDF,我可以使用以下代码:javascript中的itext页眉/页脚,java,javascript,header,itext,footer,Java,Javascript,Header,Itext,Footer,我在javascript环境中工作。我可以导入jar文件并使用itext,但所有内容都必须用js编写。对于使用itext的基本PDF,我可以使用以下代码: var byteArrayOutputStream = new java.io.ByteArrayOutputStream(); var document = new com.itextpdf.text.Document(); var paragraph; document.setPageSize(com.itextpdf.text.Page
var byteArrayOutputStream = new java.io.ByteArrayOutputStream();
var document = new com.itextpdf.text.Document();
var paragraph;
document.setPageSize(com.itextpdf.text.PageSize.LETTER);
document.setMargins(13, 13, 8, 8);
var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(document, new java.io.FileOutputStream(RESULT));
writer.setPageEvent(event);
var font1 = new com.itextpdf.text.Font(com.itextpdf.text.Font.FontFamily.TIMES_ROMAN, 10.5);
var font2 = new com.itextpdf.text.Font(com.itextpdf.text.Font.FontFamily.TIMES_ROMAN, 10.5, com.itextpdf.text.Font.BOLD);
com.itextpdf.text.pdf.PdfWriter.getInstance(document, byteArrayOutputStream).setInitialLeading(10);
document.open();
paragraph = new com.itextpdf.text.Paragraph("Stuff\n", font1);
paragraph.add(new com.itextpdf.text.Chunk("more stuff\n", font1));
paragraph.add(new com.itextpdf.text.Chunk("another line\n", font2));
paragraph.setAlignment(com.itextpdf.text.Element.ALIGN_CENTER);
document.add(paragraph);
// lines is a table of data
for (var i = 0; i < lines.length; i++) {
document.add(new com.itextpdf.text.Chunk(lines[i], font1));
document.add(com.itextpdf.text.Chunk.NEWLINE);
}
document.close();
我认为js应该是这样的:
var PageEvent = java.type(com.itextpdf.text.pdf.PdfPageEventHelper);
var PageEventExtender = java.extend(PageEvent);
var TableHeader = new PageEventExtender({
header: "[Default header]",
total: "",
onOpenDocument: function (writer, document) {
total = writer.getDirectContent().createTemplate(30, 16);
},
onEndPage: function (writer, document) {
var table = new com.itextpdf.text.pdf.PdfPTable(3);
try {
table.setWidths([24, 24, 2]);
table.setTotalWidth(527);
table.setLockedWidth(true);
table.getDefaultCell().setFixedHeight(20);
table.getDefaultCell().setBorder(com.itextpdf.text.Rectangle.BOTTOM);
table.addCell(header);
table.getDefaultCell().setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);
table.addCell("Page " + writer.getPageNumber() + "%d of");
var cell = new com.itextpdf.text.pdf.PdfPCell(com.itextpdf.text.Image.getInstance(total));
cell.setBorder(com.itextpdf.text.Rectangle.BOTTOM);
table.addCell(cell);
table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
} catch (de) {
throw de;
}
},
onCloseDocument: function (writer, document) {
com.itextpdf.text.pdf.ColumnText.showTextAligned(total,
com.itextpdf.text.Element.ALIGN_LEFT,
new com.itextpdf.text.Phrase(new java.lang.String.valueOf(writer.getPageNumber() - 1)), 2, 2, 0);
}
});
我已经经历了几个尝试扩展Java类的变体,但没有一个像预期的那样工作。以上只是我失败的尝试之一。我尝试过使用JavaAdapter,但也失败了。iText是一个Java库。如何让它在JavaScript中工作?另外,如果你能让你共享的代码在JavaScript中工作,为什么你不能使用页面事件来添加页眉和页脚?@BrunoLowagie是TableHeader类把我搞砸了。我无法让js扩展java类PdfPageEventHelper。我将发布上面的代码。是否有其他方法可以让页面事件工作,而不是扩展PageEventHelper?您还可以实现PageEvents接口的所有方法…是的,这是我的下一个想法。我的技术不太好,但我能勉强应付过去。它会占用更多的空间,但如果它能工作的话,我可以接受。谢谢
var PageEvent = java.type(com.itextpdf.text.pdf.PdfPageEventHelper);
var PageEventExtender = java.extend(PageEvent);
var TableHeader = new PageEventExtender({
header: "[Default header]",
total: "",
onOpenDocument: function (writer, document) {
total = writer.getDirectContent().createTemplate(30, 16);
},
onEndPage: function (writer, document) {
var table = new com.itextpdf.text.pdf.PdfPTable(3);
try {
table.setWidths([24, 24, 2]);
table.setTotalWidth(527);
table.setLockedWidth(true);
table.getDefaultCell().setFixedHeight(20);
table.getDefaultCell().setBorder(com.itextpdf.text.Rectangle.BOTTOM);
table.addCell(header);
table.getDefaultCell().setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);
table.addCell("Page " + writer.getPageNumber() + "%d of");
var cell = new com.itextpdf.text.pdf.PdfPCell(com.itextpdf.text.Image.getInstance(total));
cell.setBorder(com.itextpdf.text.Rectangle.BOTTOM);
table.addCell(cell);
table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
} catch (de) {
throw de;
}
},
onCloseDocument: function (writer, document) {
com.itextpdf.text.pdf.ColumnText.showTextAligned(total,
com.itextpdf.text.Element.ALIGN_LEFT,
new com.itextpdf.text.Phrase(new java.lang.String.valueOf(writer.getPageNumber() - 1)), 2, 2, 0);
}
});