북마크가 포함된 일부 PDF 파일에서 메타데이터를 가져와서 pdftk
PDF 메타데이터의 북마크 형식을 관찰했습니다. 그래서 pdf 를 사용하면 pdftk
pdf 파일의 북마크를 추가하고 편집할 수 있을 것 같습니다.
나는 다음 세 단계를 따릅니다.
- 먼저 pdf 파일에서 텍스트 파일로 메타데이터(북마크 포함)를 가져옵니다
pdftk in.pdf dump_data > in.info
. 다음으로 메타데이터 텍스트 파일에 일부 북마크를 추가하여
in.info
다음과 같이 변경했습니다.InfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals
도착하다
InfoKey: Creator InfoValue: PScript5.dll Version 5.2 InfoKey: Title InfoValue: SSReader Print. InfoKey: Producer InfoValue: Acrobat Distiller 7.0 (Windows) InfoKey: Author InfoValue: Administrator InfoKey: ModDate InfoValue: D:20050605073244+08'00' InfoKey: CreationDate InfoValue: D:20050605073244+08'00' PdfID0: 591a87c91dc76881fdf2ccf3811e72a5 PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72 NumberOfPages: 400 BookmarkBegin BookmarkTitle: Front cover BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: About the Author BookmarkLevel: 1 BookmarkPageNumber: 5 BookmarkBegin BookmarkTitle: Title page BookmarkLevel: 1 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: Copyright page BookmarkLevel: 1 BookmarkPageNumber: 7 BookmarkBegin BookmarkTitle: Foreword BookmarkLevel: 1 PageLabelNewIndex: 1 PageLabelStart: 1 PageLabelNumStyle: DecimalArabicNumerals
- 그런 다음 편집된 메타데이터를 다시 pdf 파일에 넣으려고 합니다
pdftk in.pdf update_info in.info output out.pdf
.
하지만 evince 또는 adobe reader에서 새 pdf 파일을 열면 out.pdf
새 pdf 파일에 북마크가 없습니다.
out.pdf
새 PDF 파일의 메타데이터를 얻으면 pdftk out.pdf dump_data > out.info
거기에 북마크가 없을 것입니다 out.info
. 북마크가 성공적으로 추가되지 않은 것 같습니다.
혹시 버그가 있는 건지 궁금합니다. pdftk를 통하지 않고 PDF 파일에 북마크를 어떻게 추가하고 편집합니까?
답변1
버전 1.45(2012-12-06)부터 pdftk에서는 update_info 명령을 통해 북마크 수정을 허용하는 것 같습니다.
이제 update_info를 사용하여 PDF에 책갈피를 추가하거나 변경할 수 있습니다.
통과하다: http://www.pdflabs.com/docs/pdftk-version-history/
이는 이제 원래 시도했던 것과 동일한 명령을 실행하여 북마크를 업데이트할 수 있음을 의미합니다.
pdftk in.pdf update_info in.bookmarks output out.pdf
답변2
pdftk
북마크 형식은 작성하기가 약간 지루합니다. 대신 bash
, sed
, 및 을 사용하여 pdftk
나만의 스크립트를 만들었습니다 python3
. 이 저장소에서 확인해 보세요.https://github.com/SiddharthPant/booky
이제 이런 텍스트 파일( bkmrks.txt
)을 만들 수 있고, 1000페이지짜리 PDF도 단 5분 만에 작성할 수 있습니다.
{
Title1, 1
Title2, 2
{
Subtitle1, 3
Subtitle2, 4
{
SubSubtitle1, 5
...
}
}
}
그런 다음 내 스크립트를 사용하십시오
./booky.sh pdf_file.pdf bkmrks.txt
pdf_file_new.pdf
그러면 내 북마크가 포함된 PDF( )가 자동으로 생성됩니다 .
답변3
아직도 유닉스 스크립트 사용을 고집한다면
- 덤프된 북마크 데이터 추출
pdftk
- 덤프된 북마크 데이터를
gs
Ghostscript 명령을 허용하는 pdfmarks 형식으로 변환하는 추가 스크립트를 작성하십시오. - 스크립트를 사용하여
gs
PDFmarks와 함께 병합
보세요http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/이 스크립트는 pdf-merge.py
당신(또는 내가) 원하는 것을 정확히 수행합니다.
pdf-merge.py --output=merged.pdf input1.pdf input2.pdf
그의 스크립트는 약간의 개선이 필요할 수 있습니다.
- 유니코드 처리
- 사람들이 조정할 수 있도록 북마크 파일을 출력합니다.
어쨌든 작동해야 해