当前位置: 首页 > 知识库问答 >
问题:

iTextsharp PDF文档属性

齐俊贤
2023-03-14

在上载PDF过程开始之前,我需要检查PDF是否具有以下属性,

共有1个答案

夏侯楷
2023-03-14

PDF可以用不同的方式加密。最常见的方法是添加一个或两个密码:

  1. 所有者密码:每个人都可以打开PDF,但可能有相应的权限。
  2. 用户密码:只有知道用户密码或所有者密码的人才能打开文档。

如果有用户密码,则iText无法打开文档,将抛出BadPasswordException:

public static boolean isPasswordProtected(string file) {
    try {
        PdfReader pdfReader = new PdfReader(file);
        return false;
    } catch (BadPasswordException bpe) {
        return true;
    }
}
PdfReader.unethicalreading = true;
PdfReader pdfReader = new PdfReader(file);
int permissions = pdfReader.getPermissions();

这个int实际上是一个位集。PDFEncryptor类有一个方法GetPermissionsVerbose()解释每个位的含义:

public static String More ...getPermissionsVerbose(int permissions) {
    StringBuffer buf = new StringBuffer("Allowed:");
    if ((PdfWriter.ALLOW_PRINTING & permissions) == PdfWriter.ALLOW_PRINTING) buf.append(" Printing");
    if ((PdfWriter.ALLOW_MODIFY_CONTENTS & permissions) == PdfWriter.ALLOW_MODIFY_CONTENTS) buf.append(" Modify contents");
    if ((PdfWriter.ALLOW_COPY & permissions) == PdfWriter.ALLOW_COPY) buf.append(" Copy");
    if ((PdfWriter.ALLOW_MODIFY_ANNOTATIONS & permissions) == PdfWriter.ALLOW_MODIFY_ANNOTATIONS) buf.append(" Modify annotations");
    if ((PdfWriter.ALLOW_FILL_IN & permissions) == PdfWriter.ALLOW_FILL_IN) buf.append(" Fill in");
    if ((PdfWriter.ALLOW_SCREENREADERS & permissions) == PdfWriter.ALLOW_SCREENREADERS) buf.append(" Screen readers");
    if ((PdfWriter.ALLOW_ASSEMBLY & permissions) == PdfWriter.ALLOW_ASSEMBLY) buf.append(" Assembly");
    if ((PdfWriter.ALLOW_DEGRADED_PRINTING & permissions) == PdfWriter.ALLOW_DEGRADED_PRINTING) buf.append(" Degraded printing");
    return buf.toString();
}

例如,如果想知道是否允许程序集,则需要检查pdfwriter.allow_assembly&permissions的值。

 类似资料:
  • 主要内容:设置文档属性,示例,检索文档属性,示例和其他文件一样,PDF文档也具有文档属性。 这些属性是键值对。 每个属性都提供有关文档的特定信息。 以下是PDF文档的属性 - 编号 属性 描述 1 该属性保存文件的名称。 2 使用此属性,可以设置文档的标题。 3 使用此属性,可以设置文档的作者姓名。 4 使用此属性,可以指定PDF文档的主题。 5 使用此属性,列出可以搜索文档的关键字。 6 使用此属性,可以设置为文档修改的日期 7 使用此属性,

  • 与其他文件一样,PDF文档也具有文档属性。 这些属性是键值对。 每个属性都提供有关文档的特定信息。 以下是PDF文档的属性 - S.No. 财产和描述 1 File 此属性保存文件的名称。 2 Title 使用此属性,您可以设置文档的标题。 3 Author 使用此属性,您可以设置文档的作者姓名。 4 Subject 使用此属性,您可以指定PDF文档的主题。 5 Keywords 使用此属性,您可

  • 我正试图自动记录我的配置属性,以便为它的配置创建一个类似于spring boot附录中的html。我发现我可以在这里启用配置元数据https://docs.spring.io/spring-boot/docs/2.6.6/reference/html/configuration-metadata.html但我想要的是创建一个html页面,就像我们可以用spring rest文档为api所做的那样。

  • 我已经为Word创建了一个插件。我正在尝试通过单击按钮更新word文档中的自定义属性的值。但却得不到拯救。我写的代码是: 但如果我在文档中添加一个空格然后保存它。然后保存自定义属性的值。代码为: 为什么行为是这样的。我不想在我的文档中添加任何额外的空白处。请帮帮我。提前道谢。

  • 但是对于Java项目,和都会出现上面的文档,因为在getter中有setter JavaDoc,在setter中有getter JavaDoc。 尝试用Kotlin将两个访问器的文档分开,方法如下: 对于Kotlin和Java代码,IDE中都没有显示JavaDoc。 会很感激任何想法。

  • 我有非常大的 cosmos-db 集合,我想重命名这个集合的一些属性,我发现我可以实现 C# 应用程序,它在集合文档上循环,并替换它们每个文档的文档,但是根据集合大小,这个解决方案将花费很长时间。Azure 门户上是否有任何其他解决方案(函数或存储过程)或 SDK,它们将以更少的时间为我们提供相同的功能? 例子: 旧文档{代码,CName,CAddress } 我想将属性重命名为{Customer