PDF上面的<div>图层</div>

时间:2009-02-27 01:07:22

标签: css pdf html always-on-top

所以,我面临的问题是这样的: 我有一个图层,它将被放置在页面上的pdf之上。 PDF要么使用嵌入,要么使用iframe来包含它。但是,CSS样式不适用于PDF(因为它是一个插件?)。因此,即使我把z-index:1000用于,该层仍然落后于PDF。任何想法如何解决?

这是代码:

<style type="text/css">
<!--#apDiv1 {
    position:absolute;
    left:543px;
    top:16px;
    width:206px;
    height:223px;
    z-index:1000;
    background-color:#999999;
}
</style>
<body>
  <!-- embed the pdf  -->
<object data="test.pdf" type="application/pdf" width="600" height="500" style="z-index:1" wmode="opaque">
  alt : <a href="test.pdf">test.pdf</a>
</object>

  <!-- layer -->

<div id="apDiv1" >Whatever text or object here.</div>
</body>

6 个答案:

答案 0 :(得分:25)

阅读一些论坛后......(这里有一些评论)

PDF由Acrobat Reader插件加载。它有点像它自己的东西,并且与任何HTML甚至浏览器无关(除了被浏览器加载)。 人们对Flash插件有同样的问题,而且没有解决方案。所以我想也没有解决方案。 您最好的选择是重新设计菜单,以便它们不会进入pdf占用的空间。

如果是插件,则无法可靠地将其他元素放在其顶部。当插件涉及时,浏览器通常会释放大部分“层”元素的能力。

没有直接支持在Api或Dom中覆盖'z-indexing'div。该插件加载了一个可执行文件,用一个非常简单的术语来打破浏览器窗口中的漏洞。使用'iframe shim'技术是标准的解决方法,尽管透明度可能很棘手。

我的解决方案: 两个iframe,每个都在一个div内,具有不同的z-index,当你点击黄色div时,会显示空的iframe(在pdf iframe前面),这样你就可以看到pdf文档中的绿色div。

<html>
<head>
     <script type="text/javascript">
        function showHideElement(element){
            var elem = document.getElementById(element);

            if (elem.style.display=="none"){
                elem.style.display="block"
            }
            else{
                elem.style.display="none"
            }
        }
    </script>
</head>
<body>
    <div style="position:absolute;height:100px;width:100px;background-color:Yellow;" onclick="showHideElement('Iframe1');">click me</div>
    <div style="position:absolute;z-index:100;background-color:Green;height:100px;width:100px;margin-left:200px;"></div>

    <div style="position:absolute;z-index:20;margin-left:200px;">
    <iframe visible="true"  id="Iframe1" height="100" width="100" runat="server" frameborder="0" scrolling="auto" >

     </iframe>
     </div>

    <div style="position:absolute;z-index:10;margin-left:100px;">
    <iframe visible="true" id="ipdf" src="http://www.irs.gov/pub/irs-pdf/fw4.pdf" height="1000" width="1000" runat="server" frameborder="0" scrolling="auto" >

     </iframe>
     </div>

</body>
</html>
费尔南多·罗德里格斯 frodale@gmail.com

答案 1 :(得分:5)

有一个jquery插件bgiframe,这使得实现此修复非常简单。

答案 2 :(得分:1)

通常,您可以通过在if下直接放置iframe填充来解决这些z-index问题。也就是说,它具有相同的大小和位置(但没有实际内容)。我不是100%肯定这适用于PDF,但我知道这解决了一些其他z-index问题(例如IE6上的选择框)。

如果你动态放置div,iframe垫片会很痛苦,因为你必须用它来移动iframe垫片。

答案 3 :(得分:1)

我刚刚找到了解决方法。使用iframe中的google pdf查看器在页面上显示您的pdf,然后它就像任何其他div一样。

示例:

  

&lt; iframe id =“ifr”   SRC = “http://docs.google.com/gview?url=http://www.mysite.com/test.pdf&embedded=true”   style =“width:718px; height:700px;”   FRAMEBORDER = “0” &GT;

答案 4 :(得分:0)

如果它是IE的测试,则可能与ComboBox的问题相同。尝试将iframe插入div。

答案 5 :(得分:0)

某些情况下的解决方案是使用div包装iframe,并在div或iframe父级上使用style属性“clip”。

<!DOCTYPE html>
<html>
<head>
    <title>Test Page - IFramed PDF Document Clipping</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type='text/javascript'></script>

        <style type='text/css'>
            body {padding:0em;margin:0em;font-size:16px;position:relative;}
            body * {line-height:1em;}
            #TOPNAV {list-style:none;display:block;}
            #TOPNAV li {display:inline;}
            #IFRAMEWRAPPER 
            {
                display:block;margin:0em;padding:0em;
                position:fixed;width:auto;left:0.125em;right:0.125em;top:4.125em;bottom:0.125em;
            }
            #docFrame {width:100%;height:100%;position:relative;margin:0em;padding:0em;}
            input.ACTIVE {background-color:Gray;outline:0.125em solid silver;}
            .clearfix {zoom:1;}
        </style>

        <script type='text/javascript'>
            $(document).ready(function () {

                $('#TOPNAV input').click(function () {
                    $("#TOPNAV input.ACTIVE").toggleClass('ACTIVE');
                    $(this).toggleClass('ACTIVE');
                    $("#IFRAMEWRAPPER").css("padding", "1em");
                    $("#IFRAMEWRAPPER").css("padding", "0em");

                    $("#IFRAMEWRAPPER iframe").toggleClass("clearfix");
                    $("#IFRAMEWRAPPER").toggleClass("clearfix");
                    $("#IFRAMEWRAPPER").hide();
                    $("#IFRAMEWRAPPER").slideDown(2);
                });

                $('#btnCLICK1').click(function () {
                    $("#IFRAMEWRAPPER").css("clip", "rect(auto, auto, auto, 5em)");
                });
                $('#btnCLICK2').click(function () {
                    $("#IFRAMEWRAPPER").css("clip", "rect(auto, 5em, auto, auto)");
                });
                $('#btnCLICK3').click(function () {
                    $("#IFRAMEWRAPPER").css("clip", "rect(5em, auto, auto, auto)");
                });
                $('#btnCLICK4').click(function () {
                    $("#IFRAMEWRAPPER").css("clip", "rect(auto, auto, 5em, auto)");
                });
            });
        </script>
</head>
<body>
<div class='TOPNAVWRAPPER'>
    <ul id='TOPNAV'>
        <li><input type='button' id='btnCLICK1' value='RIGHT' /></li>
        <li><input type='button' id='btnCLICK2' value='LEFT' /></li>
        <li><input type='button' id='btnCLICK3' value='BOTTOM' /></li>
        <li><input type='button' id='btnCLICK4' value='TOP' /></li>
    </ul>
</div>
<div id="IFRAMEWRAPPER">
    <iframe id='docFrame' name='TargetFrame' src="YOUR-PDF-DOCUMENT.pdf" onloadeddata='' seamless='seamless' ></iframe>
</div>

</body>
</html>