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:

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

  java pngtopdf > datei.tex
  pdflatex datei.tex

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