pdftk
может вывести "закладки" с помощью, например, pdftk file.pdf dump_data_utf8
; вы получите кучу записей Bookmark *, скрытых в остальных метаданных. grep
могу дать только их:
$ pdftk whatever.pdf dump_data_utf8 | grep ^Bookmark
BookmarkBegin
BookmarkTitle: Cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Agenda
BookmarkLevel: 1
BookmarkPageNumber: 2
«Уровень» — это уровень отступа (, поэтому уровень 2 имеет отступ от уровня 1 ). Вы можете отформатировать это в любой формат, который вы хотите для печати.
Вот сценарий Perl для печати в формате LaTeX, который затем можно передать, например, pdflatex
для получения PDF-файла (, который вы даже можете использовать pdftk для добавления в исходный PDF-файл ). Обратите внимание, что это также доступно по адресу https://gitlab.com/derobert/random-toys/blob/master/pdf/pdftoc-to-latex(. Это хорошее место для отправки запросов на вытягивание, если вы хотите его улучшить ):
.
#!/usr/bin/perl
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: (.+)$/) {
$bm->{title} = latex_encode($1);
} elsif (/^BookmarkPageNumber: (\d+)$/a) {
$bm->{page} = $1;
} else {
die "Unknown Bookmark tag in $_\n";
}
}
add_latex_bm($bm) if $bm;
print <{level}];
my $number = $bm->{number};
my $title = $bm->{title};
my $page = $bm->{page};
push @latex_bm, <
Вот как использовать этот скрипт:
chmod +x /path/to/pdftoc-to-latex.pl
в терминале sudo apt install liblatex-encode-perl
. В других дистрибутивах вам, вероятно, потребуется сделать что-то еще. /path/to/pdftoc-to-latex.pl /path/to/pdf/file.pdf > /path/to/where/you/want/tex/file.tex
cd /path/to/where/you/want/tex; pdflatex file.tex
)Есть два набора команд, которые могут это сделать, xclip
и xsel
, и они взаимозаменяемы. Чтобы использовать буфер обмена, используемый графическими приложениями (, а не буфер выбора терминала ), необходимо указать параметр.
Для копирования в буфер обмена:
uptime | xclip -selection clipboard
# or
uptime | xclip -sel clip
# or
uptime | xsel -ib
Вставить из буфера обмена в командной строке:
xclip -o -selection clipboard
# or
xclip -o -sel clip
# or
xsel -ob
Если печатать в командной строке, xsel
быстрее печатать; при присвоении псевдонима или включении в скрипт, то подробная xclip
форма более информативна -.
Лично я предпочитаю XSel вместо xclip по той же причине :в руководстве проще увидеть, как переключать выделение для копирования.
После установки попробуйте это:
uptime | xsel -ib
Между прочим, как только вы привыкнете к тому, что есть и первичный выбор, и буфер обмена, вы обнаружите, что это действительно удобно. С первичным выбором часто быстрее работать, и также приятно иметь возможность хранить два разных элемента информации одновременно. Кроме того, если у вас есть игровая мышь, вы можете использовать ratbagd/piper, чтобы связать запасные клавиши для манипулирования выборками, например, поменять местами основную и буфер обмена, используя кнопку мыши 4 большим пальцем.