我有一个用itextsharp创建的pdf文件,文件中有图像。我想在文件中放一个超链接,如果你选择图片,它将在图片浏览器中打开该图片。我可以设置一个到网址的超链接,但不知道如何让它打开一个文件。下面是代码,是的,我知道c:\ test.jpg是一个糟糕的硬编码文件名,但它只是一个测试。当你点击图片时它什么也没做,但我不知道如何告诉它该怎么做。
iTextSharp.text.Image pic =TextSharp.text.Image.GetInstance(comment.examplePic);
pic.ScaleToFit(200f, 200f);
Chunk cImage = new Chunk(pic, 0, 0, false);
Anchor anchor = new Anchor(cImage);
anchor.Reference = "c:\\test.jpg";
doc.Add(pic);
doc.Add(anchor);
答案 0 :(得分:1)
PDF是独立的。这意味着显示PDF所需的所有资源(通常)都存储在PDF中(例外情况是可以从操作系统中检索的字体)。
当您有一个PDF页面上显示的图像时,该图像的字节存储在我们称之为 Image XObject 的内容中。 XObject 是页面外部的对象,但它作为单独的对象存储在PDF文件中。
您要求将存储在此单独对象中的图像字节提供给操作系统上的查看器。这是不可能的。我不知道任何可以获取这些字节的查看器,并以某种方式将它们转发给图像查看器。
我可以想到三种可能的解决方法。我不知道你是否接受这些变通办法。
<强> 1。在线投放图像
您可以将图像放在服务器上,并使用代码段中的代码链接到该在线图像。当然:这只有在查看文档的人在线并且当他的观众询问他是否可以链接到互联网上的资源时点击“确定”时才会有效。
<强> 2。将图像作为注释提供
在这种情况下,您可以创建一个注释,为其创建一个外观,该外观在注记图层中呈现相同的图像XObject(所有注释都显示在页面内容的顶部)。您可以轻松更改注释的可见性状态,使其不可见(在您的情况下,这将是默认状态)或可见(在您的情况下,这将由单击链接时的JavaScript操作触发)。
这里有一个这样的注释示例:Advertisement。如果您打开advertisement.pdf,则会看到一个带有“关闭此广告”按钮的图像。单击该按钮后,注释的状态将更改为不可见。你可以做类似的事情,但反之亦然:点击链接使其可见而不是隐形。
此解决方案不依赖于外部查看器,图像显示在PDF查看器中。
第3。将图像添加为可选内容
从PDF 1.5开始,PDF支持可选内容。例如,参见OptionalContentExample。在这个例子中,我们有一些问题和答案,但默认情况下答案是不可见的。见layer_actions.pdf。有“开/关/切换”链接可以使答案可见或不可见。
您可以对图像执行相同操作:您可以将它们添加到默认情况下不可见的图层,但如果有人单击链接,则可以使其可见。但是:这需要支持OCG(可选内容组)的查看器以及更改这些OCG状态的操作。例如:如果您在Chrome中的PDF查看器中尝试layer_actions.pdf示例,它将无效,但如果您下载PDF并在Adobe Reader中打开它,您将看到我描述的行为。 / p>
<强>总结强>
你在问一些不可能的事情,但有一些解决方法。如果您选择了一种解决方法并且您没有成功制定该解决方法,请发布另一个问题(但请注意并非所有观众都支持所有解决方法)。
答案 1 :(得分:0)
无意冒犯,但知识过多有时会使您对小事一无所知。
这个问题的简单解决方案在这里
http://kuujinbo.info/iTextSharp/imageAnchor.aspx
我实现的示例代码就像魅力一样
PdfPCell p1 = new PdfPCell();
p1 = new PdfPCell();
p1.Padding = 0;
p1.Border = 0;
PdfPTable nav = new PdfPTable(1);
nav.WidthPercentage = 100;
nav.SpacingAfter = 12;
navbarImg.Annotation= new Annotation(0, 0, 0, 0, ur);
p1.Image = navbarImg;
nav.AddCell(p1);
_doc.Add(nav);