当前位置: 首页 > 知识库问答 >
问题:

HTML嵌入PDF所有链接覆盖以在新选项卡中打开(target=“\u blank”)

嵇浩淼
2023-03-14

我目前有一个PDF嵌入到一个网页。PDF中有几个超链接,但是点击时链接会在父框架中打开。这将用户带到一个新的页面,没有返回到原始PDF的选项(导航关闭)。我似乎不知道如何在新窗口中打开链接。

样本PDF

<embed src="https://www.antennahouse.com/XSLsample/pdf/sample-link_1.pdf" type="application/pdf" />

问题

单击此PDF上的第二个(外部)链接将导航到同一选项卡中的其他网站。

工作柱

PDF文档最初是在PowerPoint中创建的,这使我无法添加正确的href属性。是否有办法修改PDF中的链接以包含target=“\u blank”?

如果没有,我想知道在html代码中是否有某种东西可以普遍控制链接的打开方式。

欢迎提出任何建议。

谢谢

共有2个答案

施阳曜
2023-03-14

使用Adobe Acrobat右键单击链接属性。单击“操作”选项卡。如果列出了任何操作,请删除它们,然后选择运行Javascript。单击添加。将出现一个框,供您添加以下javascript。应用程序。启动URL(“http://www.yourlink.com“,对);

骆磊
2023-03-14

为了快速验证这个答案,这应该适用于现代浏览器,并且只有当PDF和PDFJ托管在您嵌入它的同一个域上时。

这里的技巧是强制使用PDF. js,并覆盖Chrome的默认行为,即将其呈现为扩展。这样你就得到了一个带有html元素的iframe,如果你不尝试CORS,你可以操作它。如果这是一个与CORS相关的用例,你就很不走运了,因为编辑CORS pdf是一种安全风险,理所当然是不允许的。

您需要按照“强制”使用的示例来设置站点。这里的资源:

https://github.com/mozilla/pdf.js/wiki/Setup-PDF.js-in-a-website https://pdfobject.com/examples/pdfjs-forced.html

您还需要在Web服务器上运行它,因为它不能单独从文件系统上正确地运行。。万岁!更多的CORS问题。

然后,您将设置您的页面,并像这样调用它(基于@Paco的要点)

<html>
<head>
    <title>test pdf</title>
</head>
<div id="pdf"
     style="width:900px; height:500px"></div>
<script src="https://pdfobject.com/js/pdfobject.min.js"></script>
<script>
    var options = {
        pdfOpenParams: {
            page: 1,
            view: "Fit",
            toolbar: 0
        },
        forcePDFJS: true, //*** Forces the use of PDF.js instead of default behavior
        PDFJS_URL: "web/viewer.html" //*** Required to use PDF.js
    };
    PDFObject.embed("../pdf-test.pdf", "#pdf", options);

    document.querySelector('#pdf iframe').onload = function () {
        //can try and hook the PDF.js event for rendering completed and call it then instead. 
        //https://stackoverflow.com/questions/12693207/how-to-know-if-pdf-js-has-finished-rendering
        setTimeout(function () {
            document.querySelector('#pdf iframe').contentDocument.querySelectorAll('a:not(.bookmark)').forEach(function (a, i) {
                a.setAttribute('target', '_blank');
            })
        }, 5000)

    }
</script>
</body>
</html>
 类似资料:
  • 我看过很多答案 Selenium IDE:在新选项卡中打开并将焦点转移到新选项卡不工作 如何在新选项卡中打开链接等...关于这个问题的帖子,但没有一个是100%相关的,所以,我再次问这个。我需要在三个不同的选项卡中打开三个不同的链接:

  • 我在home1的索引操作中有一个主页url http://localhost:3443/home1我正在有一个会话[“home”]=home1。我有另一个主页url http://localhost:3443/home2,我有一个会话session[“home”]=home2。 现在,对于某些用户来说,上下文是登陆页面Home1。因此,如果他们点击菜单上的home按钮,或者做任何这样的activi

  • 我正在尝试制作一个活动,它有几个文本视图,这些文本视图反过来又包含超链接。我使用了以下教程:http://www.android-examples.com/add-hyperlink-in-android-application-through-textview/ 我想让这些链接在chrome自定义标签点击时打开(类似于Gmail)。但我找不到任何教程说明如何这样做。

  • 我想打开我在新选项卡中找到的网站链接。我已经尝试打开一个新的标签,并将链接的url传递给这里建议的驱动程序,然而,新的标签根本不会打开。(关于如何打开新标签,还有其他几个建议,但似乎都不适合我。) 因此,我最近的尝试是右键单击链接并按“T”以在新选项卡中打开链接,如下所示:

  • 我遇到了一个有用的PDF生成代码,用于在Spring MVC应用程序中向客户机显示文件(“使用Spring MVC返回生成的PDF”): 我添加了一个声明,该方法返回一个PDF文件(“Spring 3.0 Java REST return PDF Document”):。 我的问题是,当上面的代码执行时,它立即要求客户机保存PDF文件。我希望PDF文件首先在浏览器中查看,这样客户端就可以决定是否保