#!/usr/bin/perl # Script taken from https://gitlab.com/derobert/random-toys/blob/master/pdf/pdftoc-to-latex # Manually adapt for sphinxdoc generated pdf use 5.024; use strict; use warnings qw(all); use IPC::Run3; use LaTeX::Encode; use Encode qw(decode); my @levels = qw(chapter section subsection subsubsection paragraph subparagraph); my @counters; my ($data_enc, $data); run3 ['pdftk', $ARGV[0], 'dump_data_utf8'], undef, \$data_enc; $data = decode('UTF-8', $data_enc, Encode::FB_CROAK); my @latex_bm; my $bm; foreach (split(/\n/, $data)) { /^Bookmark/ or next; if (/^BookmarkBegin$/) { add_latex_bm($bm) if $bm; $bm = {}; } elsif (/^BookmarkLevel: (\d+)$/a) { ++$counters[$1 - 1]; $#counters = $1 - 1; $bm->{number} = join(q{.}, @counters); $bm->{level} = $1 - 1; } elsif (/^BookmarkTitle: (.+)$/) { # In Sphinx title include a utf-8 icon of a link, so remove it my $title = substr($1, 0, -1); $bm->{title} = latex_encode($title); } elsif (/^BookmarkPageNumber: (\d+)$/a) { $bm->{page} = $1; } else { die "Unknown Bookmark tag in $_\n"; } } add_latex_bm($bm) if $bm; print <<LATEX; \\documentclass{report} \\title{Guide de montage Vhéliotech v1.0} \\renewcommand{\\familydefault}{\\sfdefault} \\setcounter{page}{2} \\begin{document} ${ \join('', @latex_bm) } \\end{document} LATEX exit 0; sub add_latex_bm { my $bm = shift; # Don't extract subtitle with level > 1 if ($bm->{level} > 1) { return; } my $level = $levels[$bm->{level}]; my $number = $bm->{number}; my $title = $bm->{title}; my $page = $bm->{page} + 2; push @latex_bm, <<LINE; \\contentsline {$level}{\\numberline {$number}$title}{$page}% LINE }