Probleme beim Drucken auf einen PDF-Drucker

inflamer

Bekanntes Mitglied
Hallo zusammen,

damit PDF-Drucker im Allgemeinen das gedruckte Dokument mit korrekten Seitenmaßen erzeugen, muss man anscheinend im Code dem PrinterJob ein PageFormat-Objekt mitteilen, welches die korrekten Abmessungen enthält:

Java:
double pageWidthMM = 100, pageHeightMM = 600;

Paper paper = new Paper();
paper.setSize(pageWidthMM * 72.0 / 25.4, pageHeightMM * 72.0 / 25.4);
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);

...

printerJob.setPrintable(printable, pageFormat);

Sonst wird standardmäßig eine PDF im DIN A4 Format erzeugt.

Nun kommt aber eine Merkwürdigkeit ins Spiel, die ich mir noch nicht so recht erklären kann: Das Ganze funktioniert bestens bei bestimmten Seitenabmessungen, wie etwa jenen aus obigem Code (100 x 600 mm). Bei anderen Abmessungen funktioniert es jedoch gar nicht. Ersetzt man im Code die beiden Variablen z.B. durch 33 x 50 mm und schaut sich anschließend unter Adobe Reader die Eigenschaften der erzeugten PDF an, so wird dort 37,0 x 52,2 mm angezeigt. :oops:

Zu erwähnen ist noch, dass ich mit 2 verschiedenen PDF-Druckern teste - 7-PDF und PDFCreator, bei beiden kommt stets jeweils das gleiche Ergebnis heraus.

Ich kann mir leider auch keinen Reim darauf machen, WANN die Abmessungen korrekt übernommen werden und wann nicht, welche "Gesetzmäßigkeit" also überhaupt dahintersteckt. Manche Zahlen (Abmessungen) werden korrekt in die PDF übernommen, andere nicht - warum auch immer.

Wäre dankbar für eure Ideen!
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Bist du dir sicher dass die PDF-Drucker eigene/"schraege" Papiergroeszen annehmen, und diese nicht auf konfigurierte zurueckfallen? Also dass du dem PDF-Drucker erst beibringen musst dass es Papier in diesen Groeszen gibt.
 

inflamer

Bekanntes Mitglied
Danke für die Antwort!

Ja, schon. Adobe Reader zeigt die Abmessungen (z.B. 100x600) dann auch exakt an. Ich habe es auch mit diversen anderen "schrägen" Abmessungen versucht. Teilweise klappt's auch damit, aber eben nur mit manchen, was ja mein eigentliches Problem ist...

Unbenannt - 1.png
 

inflamer

Bekanntes Mitglied
Hier noch mal ein funktionierendes Schnapszahlen-Beispiel:

Unbenannt - 1.png

Mittlerweile habe ich die leise Vermutung, dass das Format vor allem dann nicht übernommen wird, wenn die Abmessungen (grob) kleiner als A5 sind...
 

mihe7

Top Contributor
Hab das gerade mal unter Linux ausprobiert und ein Beispiel von Oracle angepasst (Spoiler wg. Oracle-Copyright-Notice):
Java:
/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;
 
public class HelloWorldPrinter implements Printable, ActionListener {
 
 
    public int print(Graphics g, PageFormat pf, int page) throws
                                                        PrinterException {
 
        if (page > 0) { /* We have only one page, and 'page' is zero-based */
            return NO_SUCH_PAGE;
        }
 
        /* User (0,0) is typically outside the imageable area, so we must
         * translate by the X and Y values in the PageFormat to avoid clipping
         */
        Graphics2D g2d = (Graphics2D)g;
        g2d.translate(pf.getImageableX(), pf.getImageableY());
 
        /* Now we perform our rendering */
        g.drawString("Hello world!", 100, 100);
 
        /* tell the caller that this page is part of the printed document */
        return PAGE_EXISTS;
    }
 
    public void actionPerformed(ActionEvent e) {
         double pageWidthMM = 33, pageHeightMM = 50;
         Paper paper = new Paper();
         paper.setSize(pageWidthMM * 72.0 / 25.4, pageHeightMM * 72.0 / 25.4);
         PageFormat pageFormat = new PageFormat();
         pageFormat.setPaper(paper);

         PrinterJob job = PrinterJob.getPrinterJob();
         job.setPrintable(this, pageFormat);
         boolean ok = job.printDialog();
         if (ok) {
             try {
                  job.print();
             } catch (PrinterException ex) {
              /* The job did not successfully complete */
             }
         }
    }
 
    public static void main(String args[]) {
 
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        JFrame f = new JFrame("Hello World Printer");
        f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        JButton printButton = new JButton("Print Hello World");
        printButton.addActionListener(new HelloWorldPrinter());
        f.add("Center", printButton);
        f.pack();
        f.setVisible(true);
    }
}

Ergebnis: im Druckerdialog ist erstmal A4 ausgewählt, dort "Custom" ausgewählt, die Seitenränder auf 0 gestellt und erhalte:
Bildschirmfoto von »2021-10-28 13:53:49«.png
 

inflamer

Bekanntes Mitglied
@mihe

Wenn du im Druckdialog nichts änderst, was ist dann das Ergebnis?

Hab' das Ganze nochmal mit dem Win10-eigenen PDF-Drucker ausprobiert. Der scheint sich um das richtige Format noch weniger zu scheren, sondern bäckt ohne wenn und aber einfach A4-Seiten.
 

MiHimbert

Mitglied
[CODE lang="java" title="Ausweis mit Format 85,7 * 54 mm" highlight="17"] try (PDDocument doc = new PDDocument()) {
// Page 1
PDFont font = PDType1Font.HELVETICA;
// PDFont font2 = PDType1Font.TIMES_BOLD_ITALIC;

String ordnerfont = "C:/xx";
PDFont fontCondensedBold = PDType0Font.load(doc, new File(ordnerfont + "d-din.condensed-bold.ttf"));


String ordner = "C:/xx";
String outfile = ordner + ausweisnr + "/Ausweis-" + ausweisnr + "-" + System.currentTimeMillis() + ".pdf";

// ----------------------------------------------------------------------------------------------
// Page Definitionen
// ----------------------------------------------------------------------------------------------

PDPage page = new PDPage(new PDRectangle(243f, 153f));
// PDPage page = new PDPage(PDRectangle.A4); //

doc.addPage(page);
PDRectangle pageSize = page.getMediaBox();
Float hoch = pageSize.getHeight();

float hochRest = hoch;

PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, false);

contentStream.setFont(font, fontSize);[/CODE]

Ich habe Ausweise zu drucken, die ein spezielles Format benötigen. Ich habe dies in der Zeile 17 im Pixelformat angegeben und bekomme in Adobe Reader das gewünschte Format 85,7 * 54 mm heraus.
Bitte beachte, wenn du im Pixelformat die Zeilen oder Logos ausgibst. Die Pixel werden von page.getHeight() bis 0 abgearbeitet.

Ich verwende

[CODE lang="java" title="POM"] <dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox-app -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-app</artifactId>
<version>2.0.20</version>
</dependency>[/CODE]

Java:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.tools.PrintPDF;
import org.apache.pdfbox.util.Matrix;
 
Zuletzt bearbeitet:

inflamer

Bekanntes Mitglied
(Bin der Thread-Ersteller, sorry für die späte Antwort.)

Aaalso, mein Fazit nach langer Fummelei: Der jeweilige PDF-Drucker entscheidet offenbar selbst, in welchem Fall er die per Java übergebene Seitengröße übernimmt und in welchem nicht (es sei denn, man greift in den Druckvorgang wie von @mihe7 beschrieben aktiv ein). Für Letzteres entscheidet er sich vor allem wohl dann gern, wenn ihm die Seitengröße zu klein erscheint - was auch immer "zu klein" auch sein soll...

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Probleme beim drucken AWT, Swing, JavaFX & SWT 13
A Probleme beim Drucken AWT, Swing, JavaFX & SWT 5
A Probleme beim Drucken (Seite wird abgeschnitten) AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
C SWT probleme beim einbinden von Images AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
N Probleme beim positionieren von Elementen AWT, Swing, JavaFX & SWT 2
A Probleme beim FocusListener AWT, Swing, JavaFX & SWT 6
L Probleme beim Refresh von JTable AWT, Swing, JavaFX & SWT 7
S Swing Probleme beim Aktualisieren einer JComboBox nach Auswahländerung AWT, Swing, JavaFX & SWT 2
K JList-Probleme beim Hinzufügen von Elementen AWT, Swing, JavaFX & SWT 3
P Swing Probleme beim Zeichen AWT, Swing, JavaFX & SWT 6
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
R Probleme beim Zeichnen eines Koordinatensystems AWT, Swing, JavaFX & SWT 10
M Probleme beim Bild einfügen in CenterPanel AWT, Swing, JavaFX & SWT 5
S Probleme beim Neuzeichnen eines JLabels AWT, Swing, JavaFX & SWT 6
W Probleme beim Erstellen einer Tabelle AWT, Swing, JavaFX & SWT 2
T Probleme beim Resizen einer JScrollPane AWT, Swing, JavaFX & SWT 2
M Probleme beim Hinzufügen von Objekten zu getContentPane() AWT, Swing, JavaFX & SWT 2
G Probleme beim Panelstruktur AWT, Swing, JavaFX & SWT 13
E Probleme beim Layout! AWT, Swing, JavaFX & SWT 8
E Probleme beim Layout mit Buttons und CheckboxGroup AWT, Swing, JavaFX & SWT 9
S Probleme beim Laden und Speichern von Dateien AWT, Swing, JavaFX & SWT 6
C Habe Probleme beim Bild laden! *Update 30.11.2006* AWT, Swing, JavaFX & SWT 28
C Probleme beim Serialisieren mit JOptionPane AWT, Swing, JavaFX & SWT 12
C Probleme beim ausführen von Programmen mit Fenstern+Inhalt AWT, Swing, JavaFX & SWT 3
Q JTextPane / Probleme beim Einfügen von <br>-Tags AWT, Swing, JavaFX & SWT 2
G Probleme beim Lösen einer Übungsaufgabe AWT, Swing, JavaFX & SWT 5
C Probleme beim 2. öffnen eines Fensters AWT, Swing, JavaFX & SWT 5
A Probleme beim Ausdrucken AWT, Swing, JavaFX & SWT 4
V Probleme beim Scrollen ein JPanels mit JScrollPane AWT, Swing, JavaFX & SWT 2
R Probleme beim Wiederherstellen eines JInternalFrames AWT, Swing, JavaFX & SWT 4
G Probleme beim Füllen einer JTable AWT, Swing, JavaFX & SWT 2
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben