pdftk와 같은 도구를 사용하여 PDF 파일의 페이지를 재정렬 할 때 책갈피를 유지하는 방법은 무엇입니까?


12

pdftk책갈피 / 개요가있는 pdf 파일의 페이지를 재정렬 하는 데 사용 하고 있지만 그 후에 출력 파일은 원본의 책갈피를 잃어 버렸습니다.

내 명령은 pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf입니다.

페이지를 다시 정렬하는 동안 책갈피를 유지하는 방법이 궁금합니다.

답변:


10

다음은 작동하는 솔루션입니다. 그러나 필요에 맞게 조정해야합니다.

내 예에서는 PDF의 첫 페이지를 제거한 다음 올바른 위치를 가리 키도록 책갈피를 업데이트해야했습니다.

  1. in.pdf에서 페이지 1을 제거하십시오.

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. in.pdf에서 in.info 파일을 만듭니다.

    pdftk in.pdf dump_data > in.info
    
  3. 내 경우에는 페이지를 제거하므로 in.info를 수정해야합니다.

    따라서 책갈피가 올바른 페이지로 연결되도록하려면 BookmarkPageNumber를 1 씩 줄여야합니다.

    PHP 코드 :

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. 최종 출력을 만듭니다 .pdf :

    pdftk temp.pdf update_info in2.info output out.pdf
    

pdftk 2.01을 사용하여 데비안에서 작업 테스트


1
나도 일했다. 어쩌면 스크립트를 실행하는 방법에 대한 힌트를 추가하거나 (어떻게 ...) 파이썬 스크립트를 추가 할 수 있습니다.#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser

6

를 수행 pdftk in.pdf dump_data > in.info한 다음을 update_info생성 할 때 매개 변수 를 추가 해야 합니다 out.pdf. 인용 man pdftk:

update_info <info data filename | - | PROMPT>

입력 데이터 파일과 일치하도록 단일 PDF의 정보 사전에 저장된 메타 데이터를 변경합니다. 입력 데이터 파일은 dump_data의 출력과 동일한 구문을 사용합니다. 비 ASCII 문자는 XML 숫자 엔티티로 인코딩해야합니다. PDF의 XMP 스트림에 저장된 메타 데이터가있는 경우 메타 데이터가 변경되지 않습니다. 예를 들면 다음과 같습니다.

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

입력이 UTF-8로 인코딩된다는 점을 제외하고 update_info와 동일합니다.


감사! 이 파일 "in.info"를 어떻게 얻습니까?
Tim

@ 팀 : 수정되었습니다. 나는 그것이 분명하기를 바랍니다. 물론 일 하기 dump_data_utf8위해 사용해야 합니다 update_info_utf8.
Philomath

3
감사! 여전히 작동하지 않습니다. 내 명령은 세 단계에 있습니다 pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf그리고 pdftk out.pdf update_info in.info output out1.pdf더 북마크 아직 없습니다 out1.pdf. `
Tim

@Tim 나는 이것이 실제로 작동하지 않음을 확인할 수 있습니다. 우연히 이것에 대한 해결책을 찾았습니까?
Glutanimate

1
커서 Google 트롤링은 북마크가 전혀 처리되지 않는다고 제안합니다.
vonbrand

5

맨 페이지 를주의 깊게 읽으면 update_info어떤 형식 으로든 데이터 를 가져옵니다 dump_data. 아마도 페이지 셔플 링에 따라 조정되어야 할 것입니다. 불가능한 소리 는 아니지만 자동은 아닙니다.

PDFtk 사이트 에만 위의 히트 및 / 만드는 결과로 책갈피를 편집 할 수 있습니다. 모든 Google은 PDF의 북마크 및 재구성에 대해 알고 있으며 위의 작업과 그들이 제공하는 놀라운 주제에 대한 서정적 인 설명 과이 스레드 ;-)에 적중합니다.

그래서 할 수없는 것 같습니다. 의견은 시도했을 때 작동하지 않는 몇 가지 가능성을 제안합니다.


1

"pdfmod"는 기존 PDF에서 하나 또는 모드 페이지를 제거 할 수있는 간단한 그래픽 도구입니다. 몇 번의 클릭만으로 가능합니다. 또한 pdf의 내용 정보와 교차 연결을 유지합니다.

"pdftk"는 잘 작동하며 오랫동안 사용하고 있었지만 pdf에서 1-2 페이지를 제거한 후 내용이 손실되었습니다. "pdftk"및 "pdfmod"에서 테스트 된 pdf 파일은 openoffice에서 작성됩니다.

https://apps.fedoraproject.org/packages/pdfmod


pdfmodpdftk메타 데이터를 보존하는 것보다 낫습니다 . exiftool출력 차이는 & 를 사용하더라도 pdfmod메타 데이터 는 보존하지만 pdftk모든 것을 보존하지는 않음을 보여줍니다 . dump_data_utf8update_info_utf8
user1338062
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.