【问题标题】:Can I convert docx to PDF while also encrypting it at the same time?我可以将 docx 转换为 PDF 并同时对其进行加密吗?
【发布时间】:2016-07-17 22:15:04
【问题描述】:

我目前正在将 docx 转换为 pdf,然后加密 pdf。这是我的代码:

    //Convert
    XWPFDocument document = new XWPFDocument(inStream);
    PdfOptions options = PdfOptions.create();
    PdfConverter.getInstance().convert(document, outStream, options);

    //Encrypt
    PdfReader reader = new PdfReader("C:\\uploads\\Resume.pdf");
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:\\uploads\\ResumeEncrypt.pdf"));
    stamper.setEncryption("hello123".getBytes(), "hello".getBytes(),
            PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
    stamper.close();

    reader.close();

通过这样做,我得到了 2 个文件。

首先我将 Resume.docx 转换为 Resume.pdf,然后将 Resume.pdf 加密为 ResumeEncrypt.pdf,生成 2 个文件 这是一个例子 -

但我只想要一个已经转换和加密的文件。

这是我想要的例子 -

转换加密后是否可以得到单个文件?

【问题讨论】:

  • 不能删除不需要的文件吗?
  • 我可以做到,但我想要更有效的方法

标签: java pdf encryption apache-poi


【解决方案1】:

尝试使用ByteArrayInputStream,给转换pdf。

几天前我做了类似的东西。如果需要,将 Base64 转换为 Gzip 并在流中解压缩为 xml,我可以为您提供类似提示的代码。

所以也许你可以基于这段代码

//Convert Based64, unzip to xml in stream (strLista is list of Base64 bytes
ByteArrayInputStream in = new ByteArrayInputStream(strLista.getBytes());
          try(InputStream reader = Base64.getMimeDecoder().wrap(in)){
          try (GZIPInputStream gis = new GZIPInputStream(reader)) {
          try (ByteArrayOutputStream out = new ByteArrayOutputStream()){
            int readGis = 0;
            while ((readGis = gis.read(buff)) > 0)
                out.write(buff, 0, readGis);

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2018-09-19
    • 2023-02-15
    • 1970-01-01
    • 2022-01-02
    • 2015-09-16
    相关资源
    最近更新 更多