【问题标题】:Using iText Java to add a new entry to the PDF Catalog使用 iText Java 向 PDF 目录添加新条目
【发布时间】:2021-04-14 14:41:24
【问题描述】:

我正在尝试向新 PDF 文档中的 PDF 目录 对象添加新条目。为此,我正在使用库 iText Java 并且新条目是一对,其键是“/MyVar”,值是一个数字。代码结束执行没有问题并创建了文件,但是如果我转到目录,则该条目不存在。

我当前的代码:

package iTextExamples;

import java.io.FileNotFoundException;

import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Document;

public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        String path = "C:\\Path\\PDF1.pdf";
        
        PdfWriter pdfWriter = new PdfWriter(path);
        
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        
        pdfDocument.addNewPage();
        
        int dia = 14;
        
        PdfNumber value = new PdfNumber(dia);
        
        PdfObject obj;
        
        obj = value;
        
        PdfName key = new PdfName("/MyVar");
        
        PdfCatalog cat = pdfDocument.getCatalog();
        
        cat.put(key, value);        

        Document document = new Document(pdfDocument);
        
        document.close();
    }

}

如果您知道可能出了什么问题并分享出来,我将不胜感激。

【问题讨论】:

    标签: java dictionary pdf itext catalog


    【解决方案1】:

    代码结束执行没有问题并创建文件,但如果我转到目录,则条目不存在。

    恰恰相反,我刚刚测试了你的代码,发现入口在那里:

    1 0 obj
    <</#2fMyVar 14/Pages 2 0 R/Type/Catalog>> 
    

    如果您期望/MyVar 而不是/#2fMyVar,则应替换

    PdfName key = new PdfName("/MyVar");
    

    通过

    PdfName key = new PdfName("MyVar");
    

    因为 PdfName 构造函数不希望 PDF 名称指示符 / 成为其参数的一部分。

    【讨论】:

    • 再次感谢您!我正在使用 PDF Analyzer 来检查 PDF 的内部结构,但没有找到条目。最后,我使用了 iText RUPS 并找到了它。感谢您的“/”评论,我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多