0

我正在显示一个PDF,<iframe>如下所示:

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

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

我的小服务程序

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){

        }

    }
4

2 回答 2

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 的人损失的钱多得多(他们还必须对这些印刷品做一些事情,然后才能对您的收入、权利、.. .)

于 2013-08-28T15:49:03.437 回答
0

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

于 2013-08-28T15:25:16.717 回答