使用PDFBOX将顶级书签添加到现有的PDF中

时间:2020-03-04 17:19:45

标签: java pdfbox

我想使用JAVA中的PDFBOX将顶级书签添加到现有的pdf文件中。

不确定以下代码为何不起作用,有人可以帮助我吗?谢谢。

下面是Document.pdf在书签部分的外观。

Top
---Node-1
-------Node-11
-------Node-12
....
---Node-2
-------Node-21
....

Java代码(程序中的一部分):

PDDocument document = PDDocument.load(new File("C:/Users/Desktop/document.pdf")) 
    PDDocumentOutline documentOutline = new PDDocumentOutline();
    document.getDocumentCatalog().setDocumentOutline(documentOutline);
    PDOutlineItem pagesOutline = new PDOutlineItem();
    pagesOutline.setTitle("All Pages");
    documentOutline.addFirst(pagesOutline);

    pagesOutline.openNode();
    documentOutline.openNode();

    document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

    document.save("C:/Users/Desktop/document.pdf");

    document.close()

1 个答案:

答案 0 :(得分:1)

这是我的尝试,如果稍后出现问题,我将保留文件名。

我所做的是将旧大纲包装到新项目中。无法一一添加现有项,因为只能添加“孤立项”。

def ssh_server(server, username, password, pg_pass, ps_user, database):

    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    client.connect(hostname=server, username=username, password=password)

    stdin_2, stdout_2, stderr_2 = client.exec_command("SET PGPASSWORD=secret_pw")

    stdin, stdout, stderr = client.exec_command(
        "pg_dump -U {} {} > kp_{}.sql\n".format(
            ps_user, database, ts_str), get_pty=True)

    client.close()