Inhaltsverzeichnis

PNGtoPDF

Tja, schon mal versucht, aus mehreren Bilddateien eine große mehrseitige pdf-Datei zu machen? Zum Beispiel nach dem Scannen eines handgeschriebenen Schriftstücks? Geht nicht mal mit einem Apple - OK, ich kann's zumindest nicht. Aber mit Java und LaTeX kann ich's:

Der Trick besteht eigentlich nur darin, eine LaTeX-Datei zu erstellen, die die gewünschten Bilder einbindet und daraus eine PDF-Datei erstellt. Eigenschaften des Programms:

  • Alle Dateien des aktuellen Verzeichnisses, die mit .png oder .jpg enden, werden mit eingebunden.
  • Die Liste der Namen wird sortiert: Zahlen, Großbuchstaben, Kleinbuchstaben.
  • Auflösung und Seitenverhältnis der Bilder bleiben erhalten.
  • Die Breite der Bilder wird fest auf 19cm eingestellt und die Höhe entsprechend berechnet.
  • Der linke und der rechte Rand ist auf 1cm eingestellt.
  • Der obere Rand ist auf 0,6cm eingestellt.
  • Ein Bild pro Seite.

Das Programm

Die kompilierte class-Datei: pngtopdf.class

Nun aber der Code:

import java.io.*;
import java.util.*;
 
public class PNGtoPDF {
        public static void main (String [] args) {
 
                // Zwischen diese beiden Strings werden später die Bilder eingebunden:
                String zeilenanfang = "\\noindent\\includegraphics[width=20.4cm]{";
                String zeilenende   = "} \\clearpage\n";
 
 
                // Der Anfang der LaTeX-Datei wird gemacht:
                String texDatei = "\\documentclass[a4paper]{article}\n"+
                "\\usepackage[pdftex]{graphics}\n"+
                "\\usepackage{graphicx} \n"+
                "\\pagestyle{empty}\n\n"+
                "\\setlength{\\voffset}{-2.54cm}      % Druckerei: Abstand zur Schneidemarke\n"+
                "\\setlength{\\topmargin}{0.6cm}      % Blattrand - Oberkante Kopfzeile\n"+
                "\\setlength{\\headheight}{0cm}       % Höhe Kopfzeile\n"+
                "\\setlength{\\headsep}{0cm}          % Unterkante Kopfzeile - Oberkante Text\n"+
                "\\setlength{\\topskip}{0cm}          % Oberkante Text - Grundlinie 1. Zeile\n"+
                "\\setlength{\\textheight}{29.2cm}    % Gesamthöhe Text; ohne letzte Unterlänge\n"+
                "\\setlength{\\hoffset}{-2.54cm}      % Druckerei: Abstand zur Schneidemarke\n"+
                "\\setlength{\\oddsidemargin}{0.2cm}    % Linker Rand: allgemein / ungerade Seiten\n"+
                "\\setlength{\\evensidemargin}{0.2cm}   % Linker Rand: gerade Seiten\n"+
                "\\setlength{\\textwidth}{20.6cm}       % Textbreite\n\n"+
                "\\begin{document}\n\n";
 
                // Der Verzeichnisinhalt wird ausgelesen und alle png-Dateien werden eingebunden:
                File verzeichnis = new File(".");
                File [] dateiliste = verzeichnis.listFiles();
                Arrays.sort (dateiliste);
 
                for (File f: dateiliste) {
                        if (f.getName().endsWith(".png") | f.getName().endsWith(".jpg")) {
                                // Ausgabe aller gefundenen Dateien:
                                // System.out.println (f.getName());
                                texDatei += zeilenanfang + f.getName() + zeilenende;
                        }
                }
 
                // Jetzt fehlt nur noch das Dateiende:
                texDatei += "\n\n\\end{document}\n";  
 
                // Jetzt gebe ich das Ganze erst mal aus:
                System.out.print (texDatei);
 
        }
}

Der Code ist vermutlich nicht optimal, aber immerhin funktioniert er. Für die weitere Verarbeitung benötigt man natürlich pdflatex. Da das aber zu jeder guten Installation gehört, dürfte das ja kein Problem darstellen…

So geht's

  • Alle Bilder und die pngtopdf.class in ein Verzeichnis speichern.
  • Folgende Aufrufe lostreten:
  java pngtopdf > datei.tex
  pdflatex datei.tex

Danach sollte es im gleichen Ordner schon eine pdf-Datei geben, die alle Bilder enthält…

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International