Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自定义属性从PDF添加/删除/检索信息_Java_Pdf_Itext - Fatal编程技术网

Java 使用自定义属性从PDF添加/删除/检索信息

Java 使用自定义属性从PDF添加/删除/检索信息,java,pdf,itext,Java,Pdf,Itext,对不起,我昨天发了一个不清楚的问题。我想在自定义属性中存储2个字符串(string1和string2),以便该字符串与pdf一起使用。我已经有了该字符串,但我不知道如何将其存储在自定义属性区域下。自定义属性区域指的是文件---->Properties---->custom---->custom属性,它成对地获得“Name”和“Value”。我希望string1存储在“Value”中,string2存储在“Name”中 稍后,我想检索/删除自定义属性区域中的字符串。 请问如何使用itext实现它

对不起,我昨天发了一个不清楚的问题。我想在自定义属性中存储2个字符串(string1和string2),以便该字符串与pdf一起使用。我已经有了该字符串,但我不知道如何将其存储在自定义属性区域下。自定义属性区域指的是文件---->Properties---->custom---->custom属性,它成对地获得“Name”和“Value”。我希望string1存储在“Value”中,string2存储在“Name”中

稍后,我想检索/删除自定义属性区域中的字符串。 请问如何使用itext实现它

感谢和问候


布莱恩

谢谢你的澄清。根据您关于如何使用Acrobat添加所需数据的描述,我们现在知道您指的是元数据

我使用Acrobat添加了一个名为“Test”的自定义元数据条目,其值为“Test”,当您查看该文件内部时,可以看到该键/值对出现在两个位置(用红点标记):

  • 它出现在信息字典中,这是存储元数据的传统位置
  • 它在XMP元数据流中作为名为Test的标记存在,前缀为pdfx(用于自定义标记)
  • 使用iText时,向信息字典添加额外值很容易。更新XMP元数据也是可能的,但是您必须自己创建XMP流,在您的情况下,这可能有点过头了。也许你的PDF只有一个信息字典,没有XMP

    此外:您说拥有该键的目的是检索它的值,然后删除自定义条目。在这种情况下,在信息字典中添加额外的条目就足够了

    根据您是想将自定义条目添加到信息字典中,添加到从头创建的PDF还是现有PDF中,您需要以下示例之一:

    在中,我们为标题添加了一个标准元数据条目和一个名为Test的自定义条目:

    public void createPdf(String dest) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream(dest));
        document.addTitle("Some example");
        document.add(new Header("Test", "test"));
        document.open();
        Paragraph p = new Paragraph("Hello World");
        document.add(p);
        document.close();
    }
    
    如您所见,iText具有添加标题、作者等的
    addX()
    方法,。。。元数据。但是,如果要添加自定义条目,则需要使用
    add()
    方法添加
    标题
    实例。您需要在打开文档之前添加元数据

    如果要将条目添加到现有PDF的信息字典中,可以使用my的示例,例如:

    现在,您可以向该
    映射添加额外的
    字符串对。
    在本例中,我们为元数据添加了标准键,但您也可以使用自定义键

    从现有PDF文件中删除条目的方式与添加条目的方式相同。添加一个
    null
    值就足够了。例如:

    info.put("Test", null);
    

    这将删除名为
    Test
    的自定义条目,以防您的信息字典中存在此类值。

    我是否可以要求代码检索回字符串对,假设我在自定义属性中保存的是Name(Test)和value(Test),并且我知道名称是Test,如何获取该值?感谢另一件事是,当我在添加自定义属性(Test,Test)之前对pdf进行哈希运算时,我得到了字符串a。但是,当我使用info.put(“Test”,null)方法删除自定义属性时。删除自定义属性后,我再次散列pdf,得到另一个字符串b。这两个字符串不一样。如何使它们得到相同的哈希结果?我使用的散列算法MD5Don’t使用注释询问额外的问题。关于散列:如果您阅读ISO-32000-1,您应该知道没有两个PDF是相等的。如果您更新PDF以添加内容,则会更改ID。如果您在某个时间更新PDF以删除该文件,则ID将再次更改。但是:它从未更改为原始ID(该ID已丢失)。此外,PDF固有的特点是对象的组织方式是随机的。您使用哈希的用例违反了PDF标准。好的,非常感谢!下次我不会在评论中提出额外的问题。
    String test = info.get("Test");
    
    info.put("Test", null);