从itextsharp注释弹出一个窗口以显示图像和文本

时间:2014-05-31 10:26:31

标签: c# javascript itextsharp

我想在C#项目中添加并弹出窗口,通过单击itextsharp注释来显示图像和文本。

iTextSharp.text.pdf.PdfAnnotation annot = iTextSharp.text.pdf.PdfAnnotation.CreateLink(stamper.Writer, c.rect, PdfAnnotation.HIGHLIGHT_INVERT, PdfAction.JavaScript("app.alert('action!')", stamper.Writer));

上面的代码用于显示警报,我想根据我的需要自定义它可以有人请给我一个选项。我不熟悉javascript。或者我可以使用任何其他选项吗?

2 个答案:

答案 0 :(得分:3)

您需要几个注释才能达到您想要的效果。

让我先从一个简单的文本注释开始:

假设:

  • writer是您的PdfWriter个实例,
  • rect1rect2是定义坐标的矩形,
  • titlecontentsstring个对象,其中包含您要在文字注释中显示的内容,

然后您需要此代码段来添加弹出注释:

// Create the text annotation
PdfAnnotation text = PdfAnnotation.CreateText(writer, rect1, title, contents, false, "Comment");
text.Name = "text";
text.Flags = PdfAnnotation.FLAGS_READONLY | PdfAnnotation.FLAGS_NOVIEW;
// Create the popup annotation
PdfAnnotation popup = PdfAnnotation.CreatePopup(writer, rect2, null, false);
// Add the text annotation to the popup
popup.Put(PdfName.PARENT, text.IndirectReference);
// Declare the popup annotation as popup for the text
text.Put(PdfName.POPUP, popup.IndirectReference);
// Add both annotations
writer.AddAnnotation(text);
writer.AddAnnotation(popup);
// Create a button field
PushbuttonField field = new PushbuttonField(wWriter, rect1, "button");
PdfAnnotation widget = field.Field;
// Show the popup onMouseEnter
PdfAction enter = PdfAction.JavaScript(JS1, writer);
widget.SetAdditionalActions(PdfName.E, enter);
// Hide the popup onMouseExit
PdfAction exit = PdfAction.JavaScript(JS2, writer);
widget.SetAdditionalActions(PdfName.X, exit);
// Add the button annotation
writer.AddAnnotation(widget);

尚未解释两个常数:

JS1:

"var t = this.getAnnot(this.pageNum, 'text'); t.popupOpen = true; var w = this.getField('button'); w.setFocus();"

JS2:

"var t = this.getAnnot(this.pageNum, 'text'); t.popupOpen = false;"

这当然在我的书中有解释,更具体地说,在第7章中解释。您可以找到完整的示例here。如果您需要C#示例,请查找相应的示例here

如果您还想要图像,请查看此示例:advertisement.pdf

当您点击“关闭此广告”时,您会在此处关闭广告。这也是使用JavaScript完成的。您需要将前一个代码段与Advertisement示例的代码组合在一起。

您需要的主要JavaScript方法是:getField()getAnnot()。您必须更改属性才能显示或隐藏内容。

答案 1 :(得分:0)

我通过使用附件而不是弹出窗口解决了这个问题。下面的代码将在您的pdf文件中放置一张图片,点击图片后,它将以全分辨率打开图片。

PdfReader reader = new PdfReader(ClassLoader.getSystemClassLoader().getResourceAsStream("source.pdf"));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("target.pdf"));

PdfAnnotation imgAttach = PdfAnnotation.createFileAttachment(stamper.getWriter(), new Rectangle(100, 100, 200, 200), "", null, "PATH/TO/image.jpeg", "image.jpeg");

PdfAppearance app = stamper.getOverContent(1).createAppearance(100, 100);
Image img = Image.getInstance("PATH/TO/image.jpeg");
img.scaleAbsolute(100, 100);
img.setAbsolutePosition(100, 100);
app.addImage(img);

imgAttach.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, app);

stamper.addAnnotation(imgAttach, 1);
stamper.getOverContent(1).addImage(img);
stamper.close();