iText 7 使用JS脚本给PDF报告加水印

huangapple 未分类评论54阅读模式
英文:

iText 7 Use JS Script to Watermark PDF Report

问题

<!-- language: lang-js -->
          
Array.from(document.querySelectorAll('.watermarked')).forEach(function(el) {
    el.dataset.watermark = (el.dataset.watermark +' ').repeat(1000);
});

<!-- language: lang-html -->
<!DOCTYPE html>
<html>
    
<head>
    <meta charset="UTF-8">
    <style>
    .watermarked::after{
        position: fixed;
        top: -90%;
        left: -75%;
        display:flex;
        width: 300%;
        height: 300%;
        transform: rotate(-45deg); 
        content: attr(data-watermark);
        font-size: 20pt;
        opacity: 0.15;
        line-height: 8em;
        word-spacing: 9em;
        letter-spacing: 2px;
        color: #ff0523;
        z-index: 1;
    }
    </style>
</head>
<body>
    <div class="watermarked" data-watermark="watermark">
        <table>
            <thead>
                <tr>
                    <td>
                        
                    </td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <div class="page" style="line-height: 3;">
                            PAGE  - Long Content
                            <br/> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tincidunt metus eu consectetur rutrum. Praesent tempor facilisis dapibus. Aliquam cursus diam ac vehicula pulvinar. Integer lacinia non odio et condimentum. Aenean faucibus cursus
                            mi, sed interdum turpis sagittis a. Quisque quis pellentesque mi. Ut erat eros, posuere sed scelerisque ut, pharetra vitae tellus. Suspendisse ligula sapien, laoreet ac hendrerit sit amet, viverra vel mi. Pellentesque faucibus nisl et dolor
                            pharetra, vel mattis massa venenatis. Integer congue condimentum nisi, sed tincidunt velit tincidunt non. Nulla sagittis sed lorem pretium aliquam. Praesent consectetur volutpat nibh, quis pulvinar est volutpat id. Cras maximus odio posuere
                            suscipit venenatis. Donec rhoncus scelerisque metus, in tempus erat rhoncus sed. Morbi massa sapien, porttitor id urna vel, volutpat blandit velit. Cras sit amet sem eros. Quisque commodo facilisis tristique. Proin pellentesque sodales rutrum.
                            Vestibulum purus neque, congue vel dapibus in, venenatis ut felis. Donec et ligula enim. Sed sapien sapien, tincidunt vitae lectus quis, ultricies rhoncus mi. Nunc dapibus nulla tempus nunc interdum, sed facilisis ex pellentesque. Nunc vel
                            lorem leo. Cras pharetra sodales metus. Cras lacus ex, consequat at consequat vel, laoreet ac dui. Curabitur aliquam, sapien quis congue feugiat, nisi nisl feugiat diam, sed vehicula velit nulla ac nisl. Aliquam quis nisi euismod massa blandit
                            pharetra nec eget nunc. Etiam eros ante, auctor sit amet quam vel, fringilla faucibus leo. Morbi a pulvinar nulla. Praesent sed vulputate nisl. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean commodo
                            mollis iaculis. Maecenas consectetur enim vitae mollis venenatis. Ut scelerisque pretium orci id laoreet. In sit amet pharetra diam. Vestibulum in molestie lorem. Nunc gravida, eros non consequat fermentum, ex orci vestibulum orci, non accumsan
                            sem velit ac lectus. Vivamus malesuada lacus nec velit dignissim, ac fermentum nulla pretium. Aenean mi nisi, convallis sed tempor in, porttitor eu libero. Praesent et molestie ante. Duis suscipit vitae purus sit amet aliquam. Vestibulum lectus
                            justo, lobortis a purus a, dapibus efficitur metus. Suspendisse potenti. Duis dictum ex lorem. Suspendisse nec ligula consectetur magna hendrerit ullamcorper et eget mauris. Etiam vestibulum sodales diam, eget venenatis nunc luctus quis. Ut
                            fermentum placerat neque nec elementum. Praesent orci erat, rhoncus vitae est eu, dictum molestie metus. Cras et fermentum elit. Aenean eget augue lacinia, varius ante in, ullamcorper dolor. Cras viverra purus non egestas consectetur. Nulla
                            nec dolor ac lectus convallis aliquet sed a metus. Suspendisse eu imperdiet nunc, id pulvinar risus. Maecenas varius sagittis est, vel fermentum risus accumsan at. Vestibulum sollicitudin dui pharetra sapien volutpat, id convallis mi vestibulum.
                            Phasellus commodo sit amet lorem quis imperdiet. Proin nec diam sed urna euismod ultricies at sed urna. Quisque ornare, nulla et vehicula ultrices, massa purus vehicula urna, ac sodales lacus leo vitae mi. Sed congue placerat justo at placerat.
                            Aenean suscipit fringilla vehicula. Quisque iaculis orci vitae arcu commodo maximus. Maecenas nec nunc rutrum, cursus elit quis, porttitor sapien. Sed ac hendrerit ipsum, lacinia fringilla velit. Donec ultricies feugiat dictum.
                        </div>
                    </td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td>
                        <div class="page-footer-space"></div>
                        <div class="page-footer">
                            I'm The Footer
                        </div>
                    </td>
                </tr>
            </tfoot>
        </table>
    </div>
</body>
</html>

After converting HTML to PDF, the watermark shows only one time, ignoring the JavaScript code. So, is the rendering of JavaScript not supported in iText 7? Is there any trick that should be applied to watermark the report from the template side? Thanks

英文:

I tried to watermark my pdf document using CSS and JavaScript code as follow:

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

            Array.from(document.querySelectorAll(&#39;.watermarked&#39;)).forEach(function(el) {
                    el.dataset.watermark = (el.dataset.watermark +&#39; &#39;).repeat(1000);
                });

<!-- language: lang-html -->

        &lt;!DOCTYPE html&gt;
        &lt;html&gt;
        
        &lt;head&gt;
            &lt;meta charset=&quot;UTF-8&quot;&gt;
            &lt;style&gt;
            .watermarked::after{
            position: fixed;
            top: -90%;
            left: -75%;
            display:flex;
            width: 300%;
            height: 300%;
        
            transform: rotate(-45deg); 
            content: attr(data-watermark);
        
            font-size: 20pt;
            opacity: 0.15;
            line-height: 8em;
            word-spacing: 9em;
            letter-spacing: 2px;
            color: #ff0523;
            z-index: 1;
        
        }
      &lt;/style&gt;   
        &lt;/head&gt;
        &lt;body&gt;
            &lt;div class=&quot;watermarked&quot; data-watermark=&quot;watermark&quot;&gt;
           
            &lt;table&gt;
                
              &lt;thead&gt;
                &lt;tr&gt;
                  &lt;td&gt;
                    
                  &lt;/td&gt;
                &lt;/tr&gt;
              &lt;/thead&gt;
          
              &lt;tbody&gt;
                &lt;tr&gt;
                  &lt;td&gt;
                    
                    &lt;div class=&quot;page&quot; style=&quot;line-height: 3;&quot;&gt;
                      PAGE  - Long Content
                      &lt;br/&gt; Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tincidunt metus eu consectetur rutrum. Praesent tempor facilisis dapibus. Aliquam cursus diam ac vehicula pulvinar. Integer lacinia non odio et condimentum. Aenean faucibus cursus
                      mi, sed interdum turpis sagittis a. Quisque quis pellentesque mi. Ut erat eros, posuere sed scelerisque ut, pharetra vitae tellus. Suspendisse ligula sapien, laoreet ac hendrerit sit amet, viverra vel mi. Pellentesque faucibus nisl et dolor
                      pharetra, vel mattis massa venenatis. Integer congue condimentum nisi, sed tincidunt velit tincidunt non. Nulla sagittis sed lorem pretium aliquam. Praesent consectetur volutpat nibh, quis pulvinar est volutpat id. Cras maximus odio posuere
                      suscipit venenatis. Donec rhoncus scelerisque metus, in tempus erat rhoncus sed. Morbi massa sapien, porttitor id urna vel, volutpat blandit velit. Cras sit amet sem eros. Quisque commodo facilisis tristique. Proin pellentesque sodales rutrum.
                      Vestibulum purus neque, congue vel dapibus in, venenatis ut felis. Donec et ligula enim. Sed sapien sapien, tincidunt vitae lectus quis, ultricies rhoncus mi. Nunc dapibus nulla tempus nunc interdum, sed facilisis ex pellentesque. Nunc vel
                      lorem leo. Cras pharetra sodales metus. Cras lacus ex, consequat at consequat vel, laoreet ac dui. Curabitur aliquam, sapien quis congue feugiat, nisi nisl feugiat diam, sed vehicula velit nulla ac nisl. Aliquam quis nisi euismod massa blandit
                      pharetra nec eget nunc. Etiam eros ante, auctor sit amet quam vel, fringilla faucibus leo. Morbi a pulvinar nulla. Praesent sed vulputate nisl. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean commodo
                      mollis iaculis. Maecenas consectetur enim vitae mollis venenatis. Ut scelerisque pretium orci id laoreet. In sit amet pharetra diam. Vestibulum in molestie lorem. Nunc gravida, eros non consequat fermentum, ex orci vestibulum orci, non accumsan
                      sem velit ac lectus. Vivamus malesuada lacus nec velit dignissim, ac fermentum nulla pretium. Aenean mi nisi, convallis sed tempor in, porttitor eu libero. Praesent et molestie ante. Duis suscipit vitae purus sit amet aliquam. Vestibulum lectus
                      justo, lobortis a purus a, dapibus efficitur metus. Suspendisse potenti. Duis dictum ex lorem. Suspendisse nec ligula consectetur magna hendrerit ullamcorper et eget mauris. Etiam vestibulum sodales diam, eget venenatis nunc luctus quis. Ut
                      fermentum placerat neque nec elementum. Praesent orci erat, rhoncus vitae est eu, dictum molestie metus. Cras et fermentum elit. Aenean eget augue lacinia, varius ante in, ullamcorper dolor. Cras viverra purus non egestas consectetur. Nulla
                      nec dolor ac lectus convallis aliquet sed a metus. Suspendisse eu imperdiet nunc, id pulvinar risus. Maecenas varius sagittis est, vel fermentum risus accumsan at. Vestibulum sollicitudin dui pharetra sapien volutpat, id convallis mi vestibulum.
                      Phasellus commodo sit amet lorem quis imperdiet. Proin nec diam sed urna euismod ultricies at sed urna. Quisque ornare, nulla et vehicula ultrices, massa purus vehicula urna, ac sodales lacus leo vitae mi. Sed congue placerat justo at placerat.
                      Aenean suscipit fringilla vehicula. Quisque iaculis orci vitae arcu commodo maximus. Maecenas nec nunc rutrum, cursus elit quis, porttitor sapien. Sed ac hendrerit ipsum, lacinia fringilla velit. Donec ultricies feugiat dictum.
                    &lt;/div&gt;
                  &lt;/td&gt;
                &lt;/tr&gt;
              &lt;/tbody&gt;
          
              &lt;tfoot&gt;
                &lt;tr&gt;
                  &lt;td&gt;
                    
                    &lt;div class=&quot;page-footer-space&quot;&gt;&lt;/div&gt;
                    &lt;div class=&quot;page-footer&quot;&gt;
                        I&#39;m The Footer
                      &lt;/div&gt;
                  &lt;/td&gt;
                &lt;/tr&gt;
              &lt;/tfoot&gt;
          
            &lt;/table&gt;
        &lt;/div&gt;
          &lt;/body&gt;
        
        &lt;/html&gt;

<!-- end snippet -->

But after converting HTML to pdf, the watermark shows only one time ignoring the JavaScript code. So, is the render of JS is not supported in iText 7? Is there any trick that should be applied to watermark the report from the template side?
Thanks

huangapple
  • 本文由 发表于 2020年4月4日 17:29:02
  • 转载请务必保留本文链接:https://java.coder-hub.com/61026121.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定