Java 如何使用密码保护已存在的PDF?

Java 如何使用密码保护已存在的PDF?,java,itext,Java,Itext,如何为现有PDF设置密码?您是否看过我书第12章中的示例 就这么简单: public void encryptPdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); st

如何为现有PDF设置密码?

您是否看过我书第12章中的示例

就这么简单:

public void encryptPdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setEncryption(USER, OWNER,
        PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
    stamper.close();
    reader.close();
}
请注意,用户和所有者的类型为byte[]。您有不同的权限选项查找以ALLOW_u开头的常量,并且可以从不同的加密算法中进行选择

至于参数:src是现有PDF的路径。dest是加密PDF的路径。很明显,在读取文件时不能写入文件。这里解释如下:

你看过我书第12章中的例子了吗

就这么简单:

public void encryptPdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setEncryption(USER, OWNER,
        PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
    stamper.close();
    reader.close();
}
请注意,用户和所有者的类型为byte[]。您有不同的权限选项查找以ALLOW_u开头的常量,并且可以从不同的加密算法中进行选择


至于参数:src是现有PDF的路径。dest是加密PDF的路径。很明显,在读取文件时不能写入文件。这里对此进行了解释:

回答@Alberto问题:如果只有字节数组作为输入,并且需要另一个字节数组作为输出,那么如何加密pdf,请使用前面的答案

我有一个名为addPasswordbyte[]templateByte的方法,它接受PDF文件的字节数组作为参数,并返回加密的字节数组作为响应

public byte[] addPassword(byte[] templateByte)
    {

        String USER_PASS = "Hello123";
        String OWNER_PASS = "Deva123";
        PdfReader pdfReader = null;

        ByteArrayOutputStream byteArrayOutputStream = ByteArrayOutputStream(templateByte.length);

        byteArrayOutputStream.write(templateByte, 0, templateByte.length); 

        try
        {

            pdfReader = new PdfReader(templateByte);
            PdfStamper stamper = new PdfStamper(pdfReader, byteArrayOutputStream);
            stamper.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
                    PdfWriter.ALLOW_PRINTING,
                    PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
            stamper.close();
            pdfReader.close();

            return byteArrayOutputStream.toByteArray();

        }
        catch (Exception e)
        {

            e.printStackTrace();
        }

        return byteArrayOutputStream.toByteArray();
    }

@Alberto问题的答案:如果只有字节数组作为输入,并且需要另一个字节数组作为输出,那么如何加密pdf,使用前面的答案

我有一个名为addPasswordbyte[]templateByte的方法,它接受PDF文件的字节数组作为参数,并返回加密的字节数组作为响应

public byte[] addPassword(byte[] templateByte)
    {

        String USER_PASS = "Hello123";
        String OWNER_PASS = "Deva123";
        PdfReader pdfReader = null;

        ByteArrayOutputStream byteArrayOutputStream = ByteArrayOutputStream(templateByte.length);

        byteArrayOutputStream.write(templateByte, 0, templateByte.length); 

        try
        {

            pdfReader = new PdfReader(templateByte);
            PdfStamper stamper = new PdfStamper(pdfReader, byteArrayOutputStream);
            stamper.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
                    PdfWriter.ALLOW_PRINTING,
                    PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
            stamper.close();
            pdfReader.close();

            return byteArrayOutputStream.toByteArray();

        }
        catch (Exception e)
        {

            e.printStackTrace();
        }

        return byteArrayOutputStream.toByteArray();
    }

请始终提供您的问题的详细信息。此外,请描述您已经尝试过的内容。您使用的是哪种语言?可能重复的请始终提供您的问题的答案。此外,请描述您已经尝试过的内容。你使用的是哪种语言?可能重复你如何加密pdf如果你只有字节数组作为输入-并且需要另一个字节数组作为输出,这是可能的?@AlbertoAcuña,回答你的问题并参考布鲁诺的答案。如果你只有字节数组作为输入,并且需要另一个字节数组作为输出,你如何加密pdf,这是可能的?@AlbertoAcuña,回答你的问题并参考布鲁诺的答案。ByteArrayOutputStream?@Lijo,请完成你的问题。我不明白。这对我不起作用,我仍然可以在没有密码提示的情况下打开我的PDF。ByteArrayOutputStream?@Lijo,请完成你的问题。我没有得到它。这对我不起作用,我仍然可以在没有密码提示的情况下打开我的PDF。