如何在iframe中禁用PDF的打印选项

时间:2013-08-28 14:59:03

标签: html pdf iframe printing

我在<iframe>中显示的PDF如下:

<iframe src="/itextPdfServlet" height="600px" width="700px"></iframe>

我想为此禁用打印选项。我怎样才能做到这一点?

我的servlet

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String fullPath = (String) request.getSession().getAttribute("fullPath");
        response.setContentType("application/pdf");
        ServletOutputStream out = null;
        try{
            File file = new File( fullPath );
            FileInputStream fileIn = new FileInputStream( file );
            out = response.getOutputStream();
            Document document = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.getInstance(document, out);
            document.open();
            PdfContentByte cb = writer.getDirectContent();
            PdfReader reader = new PdfReader(fileIn);
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("fullPath"));
            stamper.setEncryption("reader_password".getBytes(), "permission_password".getBytes(),  
                    ~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING ), PdfWriter.STANDARD_ENCRYPTION_128);
            stamper.close();
            PdfImportedPage page = writer.getImportedPage(reader, 1);
            document.newPage();
            cb.addTemplate(page, 0, 0); 
            document.add(new Paragraph("my timestamp"));
            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            document.close();

        }catch(Exception e){

        }

    }

2 个答案:

答案 0 :(得分:2)

像敌人一样对待访客或客户可能不符合您的最佳利益。您可以在生成文件时禁用PDF文件选项中的打印:

PdfReader reader = new PdfReader("testpdf.pdf");

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("my-pdf-file.pdf"));

stamper.setEncryption("reader_password".getBytes(), "permission_password".getBytes(),   ~(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING ), PdfWriter.STANDARD_ENCRYPTION_128);

stamper.close();

但我知道至少有一个不关心这些选项的PDF查看器。我知道很多可以制作屏幕截图的工具,所以即使你的PDF让我生气,我也会打印截图。有屏幕自动化工具甚至可以为我翻页,为每个页面制作一个截图,一个小脚本将从中编译一个新的PDF。

您还可以尝试在Web浏览器中禁用JavaScript打印。这会迫使我安装像Tampermonkey或类似工具一样的工具,将你的脚本从我的浏览器中踢出来。

通常,更好的方法是在PDF文件中放置水印,说明谁下载/购买了文件然后骚扰它们,如果PDF文件泄露出来的话。这样,你就不会烦扰每个人

那就是说,考虑一下你的PDF价值多少以及起诉某人会花多少钱(金钱和反馈明智)。大多数时候,将你的钱投入到优质的服务中会比你打印PDF文件的人所能获得的收入多得多(他们还必须对这些版画做些什么才能对你的收入,权利产生影响。 。)

答案 1 :(得分:0)

我从未使用过iText,但我认为这可能对你有所帮助: iText Java disable print pdf