`
zeallf
  • 浏览: 31325 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iText学习 PDF添加密码 ASN1OctetString

阅读更多
加密PDF可以在生成PDF过程中加密, 代码示例:

PdfWriter writer = PdfWriter.getInstance(pdfdoc, new FileOutputStream(pdfFilename));

/** User password. */
    public static byte[] USER = "TEST".getBytes();
    /** Owner password. */
    public static byte[] OWNER = "1234".getBytes();
writer.setEncryption(USER, OWNER, PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);

writer.createXmpMetadata();

pdfdoc.open();
。。。。。。
pdfdoc.close();


也可以后加工:
用户需求:通过邮件发送给客户的PDF文件,每个文件都有唯一的ID,通过Encrypt处理后,生成的ID注入到PDF文件中。当客户非法传递给其他非付费客户或发布到Internet上后,我们通过分析文件的ID来,对比本地数据库的USER-ID关系,通过法律部门进行维权处理。

主要功能:对已生成好的源PDF文件加入密码策略。通过Encrypt对PDF文件写入ID关键字,并setEncryption修改文档属性为不可修改即可。


★方法setKeywords主要增加关键字;pdf文件不能直接复制,通过计算当前PDF文件的总页数,然后进行一页页的写入。
1.  计算总页数 int n = reader.getNumberOfPages();
2.  新建PDF文件
PdfWriter writer =
PdfWriter.getInstance(document,new FileOutputStream("e:/newPDF.pdf"));
3.   创建写入直接内容对象
PdfContentByte cb = writer.getDirectContent();
4.  写入内容
PdfImportedPage page;
         
           int rotation;
           int i=0;
           while(i<n)
           {
              i++;                  document.setPageSize(reader.getPageSizeWithRotation(i));
              document.newPage();
              page = writer.getImportedPage(reader, i);
              rotation = reader.getPageRotation(i);
                  cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
           }
★      方法getKeywords主要取出pdf的文件信息;主要利用PdfReader的方法getInfo取当前PDF文件信息,返回对象为HashMap,输入对应key的val;
System.out.println(map.get("Author"));
       System.out.println(map.get("Keywords"));
文件Encrypt.java如下

package com.txsec.pdf;

import java.io.FileOutputStream;
import java.util.HashMap;

import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfEncryption;

public class Encrypt {

    public Encrypt() {
       // TODO Auto-generated constructor stub
    }

  
    public static void main(String[] args) {
       setPDFKeywords();
       getKeywords();

    }
  
    public static void setPDFKeywords()
    {
       try{
           PdfReader reader = new PdfReader("E:/1.pdf");
           int n = reader.getNumberOfPages();
           System.out.println("PDF总页数为:"+n);
           Document document = new Document();
           PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("e:/newPDF.pdf"));
         
           document.addAuthor("uoovi");
           document.addKeywords("123456789");
           writer.setEncryption(null,null,
                  PdfWriter.ALLOW_MODIFY_ANNOTATIONS|PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_PRINTING,
                  PdfWriter.STANDARD_ENCRYPTION_40);      
                       
           document.open();
            
           PdfContentByte cb = writer.getDirectContent();
           PdfImportedPage page;
         
           int rotation;
           int i=0;
           while(i<n)
           {
              i++;
            document.setPageSize(reader.getPageSizeWithRotation(i));
              document.newPage();
              page = writer.getImportedPage(reader, i);
              rotation = reader.getPageRotation(i);
              cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
           }
         
            
           document.close();
           System.out.println("加密成功!");
       }
       catch(Exception e)
       {
           System.out.println(e.getStackTrace());
           System.out.println(e.getMessage());
       }
         
    }

    public static String getKeywords()
    {
       try{
       PdfReader reader = new PdfReader("E:/newPDF.pdf");
       Document document = new Document();
     
     
       HashMap map = reader.getInfo();
       System.out.println(map.toString());
       map.get("Author");
       System.out.println(map.get("Author"));
       System.out.println(map.get("Keywords"));
       return "";
       }
       catch(Exception e)
       {
           System.out.println(e.getMessage());
           return "";
       }
    }
}



调用setEncryption会异常
writer.setEncryption(null,null,
                  PdfWriter.ALLOW_MODIFY_ANNOTATIONS|PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_PRINTING,
                  PdfWriter.STANDARD_ENCRYPTION_40);
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString
    at com.lowagie.text.pdf.PdfEncryption.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfWriter.setEncryption(Unknown Source)
    at com.txsec.pdf.Encrypt.setPDFKeywords(Encrypt.java:39)
    at com.txsec.pdf.Encrypt.main(Encrypt.java:23)

解决办法:下载 bcprov-jdk16-146.jar,然后加入到构建路径中
下载地址:
http://polydistortion.net/bc/download/
分享到:
评论

相关推荐

    Android使用iText生成pdf并读取pdf内容

    通过学习和理解iText的基本API,开发者可以创建丰富的PDF文档,并从现有PDF中提取所需的信息。不过,考虑到Android的内存限制和性能,使用iText时要注意优化资源管理和处理时间,以确保良好的用户体验。

    itext 生成pdf 目录

    iText 是一个强大的Java库,专门用于创建和修改PDF文档。在PDF文档中,目录(或书签)是用户友好的导航工具,可以帮助读者快速跳转到特定章节或页面。本篇文章将深入探讨如何使用iText来生成PDF的目录。 首先,理解...

    ITextPdf之绝对位置添加文本

    iTextPDF是一个流行的Java库,用于处理PDF文档,它提供了丰富的功能,包括在PDF上添加文本、图像、表格等。在这个场景中,我们将深入探讨如何使用iTextPDF在PDF中实现绝对位置的文本插入,以及如何处理多页情况。 ...

    使用itextpdf将excel转化为pdf + pdf加水印

    1. **导入itextpdf库**:在项目中添加itextpdf的依赖,这通常通过Maven或Gradle等构建工具完成。 2. **读取Excel**:使用Apache POI等库读取Excel文件,获取其内容和样式信息。 3. **创建PDF文档**:初始化一个...

    使用IText生成PDF和WORD文档

    IText是一款广泛使用的Java库,专门用于创建和编辑PDF及Word文档。在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document ...

    itext7 pdf转图片

    在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...

    iText_pdf.rar_iText pdf_itext PDF类

    1. **文本和图像处理**:你可以使用iText向PDF中添加文本、图片、表格和各种图形元素。它支持多种字体和排版样式,可以处理Unicode字符集,因此可以轻松创建包含中文的PDF文档。 2. **表单处理**:iText允许创建...

    iText生成pdf解决中文不显示

    iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...

    iText操作Pdf简单整理

    在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...

    Itext删除PDF的图层

    Itext是PDF处理的强力工具,它允许开发者进行各种操作,包括添加文本、图像、表格,以及处理PDF的安全性、表单、链接等。对于图层管理,Itext提供了对PDF/CO(PDF with Optional Content)标准的支持,即对PDF中的...

    itextpdf.jar

    除此之外,iTextPDF还具备一些高级功能,如数字签名、文档加密、水印添加等,这些都能增强PDF文档的安全性和专业性。例如,通过数字签名,可以确保PDF文件的完整性和来源的真实性;通过加密,可以保护敏感信息不被...

    itext生成PDF开发文档

    在 Java 开发中,iText 提供了丰富的 API,使得开发者可以方便地在代码中创建 PDF 文件、添加文本、图像、表格、链接等元素,甚至进行数字签名和表单处理。在本项目中,我们看到使用了 iText 7.0.2 版本,这是 iText...

    iText PDF pdf文档生成itext5.5.11.zip,itxt-asian5.20.jar,加水印,去水印代码,功能强大。

    提供的加水印代码可以帮助开发者理解如何使用iText库在PDF文档上添加透明或不透明的文字或图像水印。而去水印功能则相对复杂,可能涉及到对PDF结构的深入理解,因为PDF标准并不支持直接删除水印,通常需要通过解析...

    freemarker+itext生成PDF

    Itext提供了一系列API,可以方便地创建PDF文档,包括添加文本、图像、表格、超链接等元素。它可以处理PDF文档的各种复杂性,比如页面布局、样式设置、数字签名等。通过Itext,你可以构建完全自定义的PDF文档,满足...

    itextpdf中文帮助文档.pdf

    1. **安装与引入**:首先,介绍如何将iTextPDF库引入到Java项目中,通常通过Maven或Gradle的依赖管理来实现。同时,可能会提到不同版本的兼容性和选择合适的版本。 2. **基本概念**:解释PDF文档的基本结构,如页面...

    itextpdf 导出pdf 表格 自动分页中文 目录

    1. **iTextPDF**: iTextPDF是iText项目的一部分,它提供了丰富的API来生成、修改和解析PDF文档。5.5.5版本是iText的一个较新版本,增加了许多功能和性能优化。例如,它可以创建动态表单、添加图像、设置文本样式、...

    使用iText生成PDF.doc

    可以使用`Paragraph`类添加文本,如示例中的`document.add(new Paragraph("使用iText生成PDF"))`。 5. **创建表格**: `Table`类用于创建PDF中的表格。示例中创建了一个2行4列的表格,并添加了单元格。`addCell()...

    itext对pdf进行编辑

    itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框

    itextpdf-5.5.13

    《iTextPDF 5.5.13:创建PDF文件的高效工具》 iTextPDF是一款功能强大的Java库,主要用于创建、编辑以及处理PDF文档。版本5.5.13是其历史版本之一,提供了丰富的API和功能,使得开发者能够方便地在Android平台上...

    java使用itextpdf、itext-asian对pdf文件加水印

    1. **引入依赖**:在你的项目中,你需要添加iTextPDF和iText-Asian的依赖。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.itextpdf&lt;/groupId&gt; &lt;artifactId&gt;itextpdf &lt;version&gt;5.5.13...

Global site tag (gtag.js) - Google Analytics