我想在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。或者我可以使用任何其他选项吗?
答案 0 :(得分:3)
您需要几个注释才能达到您想要的效果。
让我先从一个简单的文本注释开始:
假设:
writer
是您的PdfWriter
个实例,rect1
和rect2
是定义坐标的矩形,title
和contents
是string
个对象,其中包含您要在文字注释中显示的内容,然后您需要此代码段来添加弹出注释:
// 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();