Użyć konwersji, aby pobrać konkretną stronę z pliku PDF?

21

Wiem, że już to robiłem, więc jestem pewien, że to możliwe, po prostu zapominam, jak to zrobić. Istnieje sposób, aby powiedzieć konwerterowi, aby pobrać konkretną stronę pliku PDF, i chciałbym zachować format tej strony jako PDF.

ixtmixilix
źródło

Odpowiedzi:

24

ImageMagick to narzędzie do obrazów bitmapowych, których większość plików PDF nie jest. Jeśli go użyjesz, zrasteryzuje dane, co często nie jest pożądane.

Pdftk może wyodrębnić jedną lub więcej stron z pliku PDF.

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf

Jeśli masz instalację LaTeX z PDFLaTeX, możesz użyć stron pdf . Istnieje opakowanie powłoki dla stron pdf, pdfjam .

pdfjam -o pages_42_43.pdf input.pdf 42,43

Inną możliwością (przesadną tutaj, ale przydatną w przypadku wymagań bardziej złożonych niż jedna strona) jest Python z biblioteką PyPdf .

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in [42, 43]:
    output.addPage(input.getPage(i))
output.write(sys.stdout)
Gilles „SO- przestań być zły”
źródło
Miałem też polecić pdftk. Będziesz chciał z niego skorzystać.
Sebastian
pdfjamdziała jak urok i został już zainstalowany z moją dystrybucją LaTeX. Jest bardzo łatwy w użyciu.
hdl
Wielkie dzięki. Wyodrębniona strona była większa niż pełny plik pdf z, pdftkwięc nie wydaje się po prostu wyodrębniać strony. W przeciwnym razie wynik był dobry.
Eric Duminil,
25

Możesz użyć notacji w convert(1)indeksie dolnym, aby „indeksować” do pliku PDF:

$ convert source.pdf[1] dest.pdf 

Wartość indeksu zależy od sposobu, w jaki eksporter PDF numerował strony. W testach na plikach tutaj liczby wydają się być zerowe, więc powyższy przykład pokazuje drugą stronę dokumentu. Widziałem przykłady online, w których zamiast tego pokazują indeksy liter, ponieważ najwyraźniej twórca PDF „ponumerował” w ten sposób strony w tym dokumencie.

Niestety nie daje to bardzo dobrych wyników, ponieważ ImageMagick zakłada, że ​​wszystko opiera się na pikselach, a zatem rasteryzuje obrazy wektorowe, takie jak typografia w typowym pliku PDF.

Lepszym narzędziem do tego zadania jest Ghostscript , który prawdopodobnie już zainstalowałeś:

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf

To przekazuje dane PDF bez zmian, ponieważ Ghostscript rozumie PDF (pochodną PostScript) na znacznie głębszy poziom niż ImageMagick.

Warren Young
źródło
2
tak naprawdę nie jest to prawdą w przypadku imagemagick, jeśli ustawisz parametr -density na około 300-400, wtedy tekst wyjściowy z pdf w png będzie wyglądał dobrze.
buggedcom
2
Na pewno będzie dobrze wyglądać na ekranie, ale jeśli następnie przejdziesz do drukowania, będziesz chciał ustawić gęstość jeszcze wyżej. A potem prawdopodobnie będziesz mieć problem ze sposobem, w jaki RIP twojej drukarki radzi sobie z szarymi pikselami antyaliasingu wyprowadzanymi przez ImageMagick. Możesz więc zamiast tego wybrać wyjście do 1-bitowego czarno-białego w natywnej rozdzielczości drukarki, która może wynosić 1200 dpi, 1440 dpi lub coś innego, i musisz wiedzieć o tym wcześniej, aby uzyskać ostry wydruk. Nie, będę przestrzegać mojego oświadczenia: najlepiej przechowywać dane PDF w formie wektorowej tak długo, jak to możliwe.
Warren Young,
@buggedcom Znalazłem, że -density 300to najsłodsze miejsce. Coś większego i tworzysz ogromne pliki tymczasowe - które i tak prawdopodobnie zmniejszysz do miniatur
Mike Causer
2
Możesz także wybrać zakres stron (np. Do robienia source.pdf[3-6]
gifów)