Wygenerować plik PDF z wiersza polecenia i wypełnić stronę możliwie jak największą liczbą kopii obrazu?

2

Dużo szukałem tego, ale nie mogłem znaleźć rozwiązania.

Jak mogę wygenerować plik PDF w dowolnym formacie papierowym (powiedzmy A4) i wypełnić jego strony jak największą liczbą kopii obrazu?

Szukam rozwiązania CLI, używając programów takich jak ImageMagick, Poppler, Ghostscript i tym podobnych.

Mój przypadek użycia: zmieniłem hasło dla gości Wi-Fi w moim biurze, chciałem wysłać wokół ładnego A4 PDF składającego się z ciasnej siatki, każda komórka zawierała SSID sieci i klucz WPA, do wydrukowania, pocięcia na rozdane części dla gości odwiedzających.

Nie mogłem znaleźć sposobu, aby to zrobić i postanowiłem ręcznie wkleić małe obrazy na stronie za pomocą MS Word.

EDYCJA: jak wyglądały te małe obrazy. Wystarczy wpisać do edytora tekstu i zrobić zrzut ekranu z tekstem.

wprowadź opis zdjęcia tutaj

Będę zmieniać to hasło co 3 miesiące, więc chciałbym mieć rozwiązanie automatyczne / skryptowalne. Nie musi być idealny, ale musi być szybki.

zool
źródło

Odpowiedzi:

2

W oparciu o wymiary obrazu i takie jak przykładowy plik JPG, który opublikowałeś na swoje pytanie , kiedy kliknę go prawym przyciskiem myszy i wybierz Zapisz obraz jako ... , lista zapisanych plików Lista atrybutów obrazu jako. . .

  • Wymiary: 2850 x 1237
  • Szerokość: 2850 pixels
  • Wysokość: 1237 pixels

wprowadź opis zdjęcia tutaj

Udało mi się zebrać 24 z tych zdjęć w jeden plik obrazu przy użyciu poniższych metod / poleceń w ImageMagick, które opiszę poniżej. Chociaż nie przedstawię logiki kopiowania liczby „x” oryginalnych obrazów w celu uzyskania oczekiwanego rezultatu, takie zadania są trywialne i założę się, że nie potrzebujesz pomocy ani przykładów dla tej części jako takiej - jeśli tak, to tylko daj mi znać.


Szczegółowe kroki. . .

Przypomnienie: Nie przedstawiłem logiki do kopiowania lub usuwania plików, o których wspomniałem, że tego typu operacje są potrzebne i zakładam, że możesz to rozwiązać, ale daj mi znać inaczej.

  1. Będziemy chcieli, aby zrobić kilka kopii SSID i klucza WPA-pliku obrazu w /foldergdzieś tak masz w sumie 6 zdjęć do uruchomienia pierwszego ImageMagick komendę przeciw.

  2. Gdy te 6 plików obrazów znajduje się w /folder, uruchomisz na nich to polecenie, aby utworzyć nowy plik wyjściowy o nazwie out.jpgw moim przykładzie:

    convert /folder/*.jpg -gravity center -append /output/out.jpg
    
  3. Teraz usuniesz 6 oryginalnych plików „SSID i obraz klucza WPA”, a następnie skopiujesz nowy plik out.jpgdo, /foldera następnie skopiujesz go, aż będziesz mieć w sumie 4 pliki /folder, a następnie uruchom to polecenie:

    convert /folder/*.jpg -gravity center +append /output/nout.jpg
    
  4. Następnie możesz usunąć 4 kopie tych plików /output, które skopiowałeś na # 3, a następnie uruchomić to polecenie wobec nowo utworzonego nout.jpg, utworzonego za pomocą powyższego polecenia, aby uzyskać plik w formacie strony a4:

    convert /output/nout.jpg -page a4 /output/print.jpg
    
  5. Teraz wydrukuj print.jpgplik obrazu i sprawdź, czy wygląda dobrze, wytnij, zemdleć itp.

    wprowadź opis zdjęcia tutaj

Uwaga: Jeśli wymiary obrazu i takie dla obrazu początkowego są inne i nie dają się odpowiednio skalować z końcowym wynikiem, będziesz chciał grać z liczbą „x” obrazów na każdym kroku, o którym mówiłem, a następnie po uruchomieniu polecenie przeciwko tym obrazom, będziesz chciał otworzyć skorelowane pliki wyjściowe i sprawdzić, czy możesz ustalić liczbę „x”, która powinna być dla każdego kroku. Testowanie tego może być na czas, ale jest kolejnym trywialnym zadaniem, które jest tak łatwe do wymyślenia.


Dalsze zasoby

Pimp Juice IT
źródło
@zool Grałem z montageniektórymi opcjami, a obrazy były rozmyte, więc przeszedłem do innych metod. Nie zmniejszyłem również rozmiaru oryginalnego pliku, aby go pomniejszyć, aby zobaczyć, jak dopasować więcej mniejszych obrazów do jednego arkusza, ale zakładam, że będzie to wystarczające, aby zapewnić podstawowy punkt początkowy, co najmniej, aby zachęcić Cię do pracy nad automatyzacją skrypt i tym podobne do twojego zadania.
Pimp Juice IT
1

Możesz to zrobić za pomocą Pandoc i wygenerować plik PDF.

Pierwsza metoda: wklej 1 linię tekstu do Markdown, a nie obrazy do MS Word

Zamiast wklejać obraz do dokumentu MS Word, możesz również wkleić ten wiersz do pliku tekstowego, który nazwiesz my-markdown.md:

![](https://i.stack.imgur.com/l9TLd.jpg) { width="33%" }

To dałoby 3 obrazy w rzędzie. Oczywiście możesz zmodyfikować szerokość do dowolnej wartości, którą chcesz. Domyślam się, że można zrobić z 60 identycznymi liniami przy użyciu width="33%"i 112 identycznymi liniami przy użyciu width="24%"(4 obrazy na wiersz).

Ponieważ chciałeś mieć „dowolne formaty papieru (powiedzmy A4)” , podam ci prawie A4 przykład. Musisz przekonwertować go na format PDF w następujący sposób:

pandoc          \
  -o images.pdf \
  -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
     images.md 

Zrzut ekranu:

wprowadź opis zdjęcia tutaj

Druga metoda: zrób to wszystko w jednym wierszu poleceń

Ponieważ nie mam obecnie dostępnego systemu Windows, dlatego mogę potwierdzić i przetestować za pomocą Powershelllub cmd.exe, podam przykład Bash dla systemu Linux / macOS:

for i in {1..112} ; do
    echo '![](https://i.stack.imgur.com/l9TLd.jpg){ width="24%" }' ;
done \
|    \
pandoc -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
       -o images2.pdf \
       -

Pierwsza część powyżej zapisuje ten sam wiersz 112 razy <stdout>, ale przesyła go do Pandoc w <stdin>celu dalszego przetwarzania bez zapisywania pliku Markdown.

wprowadź opis zdjęcia tutaj

Kurt Pfeifle
źródło