0

我在 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.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();

我想要的是“段落”成为每一页的标题。我试图将这个页面中的示例转换为iText5.1.0 set header and footer in document到 js,但内部 clas 让我很困惑,因为它扩展了另一个类。我尝试使用 JavaAdapter,但没有按预期工作。

谁能帮我让页眉/页脚在 js 中工作?

谢谢!

编辑:

这是我要转换的java代码:

class TableHeader extends PdfPageEventHelper {
    String header;
    PdfTemplate total;

    public void setHeader(String header) {
        this.header = header;
    }

    public void onOpenDocument(PdfWriter writer, Document document) {
        total = writer.getDirectContent().createTemplate(30, 16);
    }

    public void onEndPage(PdfWriter writer, Document document) {
        PdfPTable table = new PdfPTable(3);
        try {
            table.setWidths(new int[]{24, 24, 2});
            table.setTotalWidth(527);
            table.setLockedWidth(true);
            table.getDefaultCell().setFixedHeight(20);
            table.getDefaultCell().setBorder(Rectangle.BOTTOM);
            table.addCell(header);
            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(String.format("Page %d of", writer.getPageNumber()));
            PdfPCell cell = new PdfPCell(Image.getInstance(total));
            cell.setBorder(Rectangle.BOTTOM);
            table.addCell(cell);
            table.writeSelectedRows(0, -1, 34, 803, writer.getDirectContent());
        }
        catch(DocumentException de) {
            throw new ExceptionConverter(de);
        }
    }

    public void onCloseDocument(PdfWriter writer, Document document) {
        ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
                new Phrase(String.valueOf(writer.getPageNumber() - 1)),
                2, 2, 0);
    }
}

这是我认为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 但也失败了。

4

0 回答 0