我正在为PDF单元格编写单元格事件。我需要写一些文本,并在该文本后附加超链接。 一切正常,但超链接未显示且不可点击。 我正在使用 itext5 。
注意:我的要求是在单元事件中而不是在普通单元中编写代码(在内部搜索,所有示例均针对普通单元)。
private static class AddHyperLink implements PdfPCellEvent {
public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
Paragraph mainPragraph = new Paragraph();
Chunk descCk = new Chunk("This is "), descFont);
mainPragraph.add(descCk);
Chunk orgDiscriptionMore = new Chunk("HyperLink");
orgDiscriptionMore.setAnchor("http:/www.google.com");
mainPragraph.add(orgDiscriptionMore);
PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
ColumnText ct = new ColumnText(canvas);
ct.setSimpleColumn(position);
ct.addElement(mainPragraph);
ct.go();
}
}
答案 0 :(得分:0)
基本上,您的代码对我有用,您只需要为其提供足够大的单元格即可工作!
行
Chunk descCk = new Chunk("This is "), descFont);
显然是错误的,左括号和右括号不匹配。而且由于您没有在任何地方提供descFont
,因此我只是将其删除并将行减少为
Chunk descCk = new Chunk("This is ");
行
ct.go();
显然会导致编译错误,因为该方法被声明为throws DocumentException
。我只是将其封装在try {} catch() {}
中:
try {
ct.go();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
现在您的班级可以编译了...
(Cf. the inner class AddHyperLink
in the CreateLink
test)
啊,显然还有一个细节需要修正:
orgDiscriptionMore.setAnchor("http:/www.google.com");
URL无效,要使其正常工作,请使用有效的URL:
orgDiscriptionMore.setAnchor("http://www.google.com");
要验证侦听器是否正常运行,我们只需要一个表,该表的单元格足够大,可以容纳您要添加的文本,例如
Image image = Image.getInstance(...);
image.scaleToFit(110,110);
Document doc = new Document();
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(new File(RESULT_FOLDER, "link-in-cell-event.pdf")));
writer.setCompressionLevel(0);
doc.open();
PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell(image);
cell.setCellEvent(new AddHyperLink());
table.addCell(cell);
doc.add(table);
doc.close();
(CreateLink测试testCreateLinkInCellEvent
)
示例图片的结果:
因此,它可以正常工作。