|
|
|
#!/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
|
|
|
|
}
|