Numérotation des titres (niveaux 1 et 2) L'avant propos n'est pas numéroté (et n'apparait pas dans la table des matières) Le titre principal du document n'est pas un niveau de titre normal Mise en forme de la première page
72 lines
1.6 KiB
Perl
Executable file
72 lines
1.6 KiB
Perl
Executable file
#!/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
|
|
}
|