如何更改Javascript书签中的子父关系?或删除子级别

问题描述 投票:0回答:1

我是一名简单的办公室职员,具有基本的编程知识,希望让自己的工作更轻松。 我需要从 PDF 中删除所有书签级别。

我正在使用 PDF X-Change Editor,为此我使用 Javascript 控制台

基本上,我想-将所有儿童书签更改为与父母书签相同的级别

enter image description here

我有这个代码,但我只能让它显示子书签是否存在

// Get the root bookmark node of the document
var rootBookmark = this.bookmarkRoot;
 
// Check if the root bookmark node exists

if (rootBookmark) {
    // Iterate through each child bookmark

    for (var i = 0; i < rootBookmark.children.length; i++) {
        var bookmark = rootBookmark.children[i];
        // Perform operations on each bookmark, such as accessing its name or properties

        console.println("Bookmark Name: " + bookmark.name);
 
    // Check every children
        if (rootBookmark.children[i].children){
             console.println("Si entro");
 
        }else{
            console.println("no");
        }
 
    }
} else {
    console.println("No bookmarks found in the document.");
}
 
javascript pdf adobe
1个回答
0
投票

我建议不要费力地阅读 Adobe 手册(通常很难找到 ECMA 脚本示例)。至少可以通过其他 2 种方法来更轻松或更难地完成任务。

一个常见的建议是解压缩 PDF 并使用正则表达式或其他基于文本的编辑器,例如由 python、java 等驱动的编辑器。这有其用途,但使如此简单的要求变得复杂。为了说明为什么这里是最小的 PDF 文件,其中需要挑选和更改嵌套对象。

PDF 通常由作者以“随机”顺序编写,因为每个部分可能在线程中花费不同的时间来构建。但整个文件将是相关部分的合理索引串行文件写入,例如这样。

%PDF-1.7
1 0 obj<</Outlines 7 0 R/Pages 2 0 R/Type/Catalog>>endobj
2 0 obj<</Count 4/Kids[6 0 R 4 0 R 5 0 R 3 0 R]/Type/Pages>>endobj
6 0 obj<</MediaBox[0 0 595.2756 841.8898]/Parent 2 0 R/Resources<<>>/Type/Page>>endobj
3 0 obj<</MediaBox[0 0 595.2756 841.8898]/Parent 2 0 R/Resources<<>>/Type/Page>>endobj
5 0 obj<</MediaBox[0 0 595.2756 841.8898]/Parent 2 0 R/Resources<<>>/Type/Page>>endobj
4 0 obj<</MediaBox[0 0 595.2756 841.8898]/Parent 2 0 R/Resources<<>>/Type/Page>>endobj

7 0 obj<</Count 3/First 8 0 R/Last 9 0 R>>endobj
8 0 obj<</A<</D[6 0 R/FitH 841.8898]/S/GoTo>>/Next 9 0 R/Parent 7 0 R/Title(Page 1)>>endobj
9 0 obj<</A<</D[4 0 R/FitH 841.8898]/S/GoTo>>/Count 2/First 10 0 R/Last 11 0 R/Parent 7 0 R/Prev 8 0 R/Title(Page 2)>>endobj
11 0 obj<</A<</D[3 0 R/FitH 845.7235]/S/GoTo>>/Parent 9 0 R/Prev 10 0 R/Title(Page 4)>>endobj
10 0 obj<</A<</D[4 0 R/FitH 841.8898]/S/GoTo>>/Next 11 0 R/Parent 9 0 R/Title(Page 2)>>endobj

xref
0 12
0000000000 65536 f 
0000000009 00000 n 
0000000067 00000 n 
0000000134 00000 n 
0000000221 00000 n 
0000000308 00000 n 
0000000395 00000 n 
0000000483 00000 n 
0000000532 00000 n 
0000000624 00000 n 
0000000749 00000 n 
0000000843 00000 n 

trailer
<</Size 12/Root 1 0 R>>
startxref
938
%%EOF

请注意,提升书签可能并不总是如预期的那样,因此在此图中,同一页面有 2 个嵌套书签。

需要的是导出大纲并将较低的条目提升到根0级别。也许最简单的工具可以做到这一点,并且可以通过“拖放”或“发送到”命令轻松驱动,文件名是 Coherent cpdf。因此,这个 example.cmd 是针对该任务的,可以进行修改以适应其他类似的情况。

列表 > 编辑 > 替换所有书签。

usage: script.cmd input.pdf

set "cpdf=..\apps\pdf\cpdf\cpdf.exe"

del /q "%temp%\bookmarks-*.txt"

"%cpdf%" -list-bookmarks -utf8 "%~dpn1.pdf" 2>nul 1>"%temp%\bookmarks-out.txt"

for /f "tokens=1* delims= " %%f in (%temp%\bookmarks-out.txt) do (
 if %%f==0 echo %%f %%g >>"%temp%\bookmarks-in.txt"
 if %%f==1 echo 0 %%g >>"%temp%\bookmarks-in.txt"
)
 
REM LONGHAND "..\apps\pdf\cpdf\cpdf.exe" -remove-bookmarks "%~dpn1.pdf" -o "%~dpn1-tmp.pdf"
REM      AND "..\apps\pdf\cpdf\cpdf.exe" -add-bookmarks "%temp%\bookmarks-in.txt" "%~dpn1-tmp.pdf" -o "%~dpn1-out1.pdf"

REM Combined
"%cpdf%" -remove-bookmarks "%~dpn1.pdf" AND -add-bookmarks "%temp%\bookmarks-in.txt" -o "%~dpn1-out.pdf"

结果 它将删除重复的条目并提升其他条目。

© www.soinside.com 2019 - 2024. All rights reserved.