Swing to iText - Problem mit Schriftarten und Schriftgrößen

Status
Nicht offen für weitere Antworten.

iflow

Mitglied
Guten Abend!

Ich hoffe, ich bin zu diesem Problem im richtigen Forum, es handelt sich nämlich um iText.

Mein Problem ist, dass wenn ich z.B.: in einem jLabel einen Text mit der Formatierung: Courier, Font.Plain, Schriftgröße: 12 habe und daraus ein PDF generiere, dann stimmt die Größe, Schriftart im "Java Fenster" nicht mit der Formatierung im vom iText generierten PDF überein.

mfg iflow

Code zum PDF generieren:
Code:
float pixelZuPunkte = 3508 / 841.9f; //Adobe arbeitet mit Punkten, Java mit Pixel(Umrechnung)

schriftPosX = (float) (ec.getDescriptionLocation().getX() * prop) / pixelZuPunkte;
schriftPosY = (float) (841.9f - (ec.getDescriptionLocation().getY() * prop) / pixelZuPunkte);
cb.beginText();
cb.setColorFill(Color.BLACK);
cb.setFontAndSize(bf, ec.getDescriptionFontSize() / pixelZuPunkte);
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, 
ec.getConnectionDescription().getText(), schriftPosX, schriftPosY, 0);
cb.endText();
cb.stroke();
 

Wildcard

Top Contributor
Was meinst du mit Java arbeitet mit Pixel? Schriftgrößen werden üblicherweise mit pt Angegeben.
 

Wildcard

Top Contributor
Die Font Size wird in Java ebenfalls in pt (ca.1/72 Zoll) angegeben.
Ob es dann auf dem Bildschirm auch so passt hängt noch von der GraphicsConfiguration ab, also wie die Größe auf das Device übertragen wird.
Das bei dieser Transformation auch bestimmte Mainstream Betriebssysteme wie Windows Probleme haben, siehst du daran, das in Windows die Schrift bei höheren Auflösungen kleiner wird.
 

iflow

Mitglied
oh danke für die Informationen! :)

Gibt es vl eine gute Seite die mir mehr Informationen liefert über die Größe von einem Java Point oder kann ich davon ausgehen das z.B ein Java pt gleich groß ist wie in OpenOffice Writer oder MS Word, sprich hängt es vom System ab oder hat Java seine eigenen pt Definitionen?

mfg
 

Wildcard

Top Contributor
Wo schaut man zuerst? Richtig, in der API :wink:
http://java.sun.com/javase/6/docs/api/java/awt/Font.html#getSize()
 

iflow

Mitglied
So ich übernehme jetzt die Schriftart bzw. auch Schriftgröße von Java, wenn ich mit iText ein PDF erstelle, hier der Teilcode dazu:

Code:
BaseFont bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
float schriftPosX = (float) (ec.getDescriptionLocation().getX() * prop) / pixelZuPunkte;
float schriftPosY = (float) (841.9f - ec.getDescriptionFontSize() - 
(ec.getDescriptionLocation().getY() * prop) / pixelZuPunkte);

cb.beginText();
cb.setColorFill(Color.BLACK);
cb.setFontAndSize(bf, ec.getDescriptionFontSize());
System.out.println(""+ec.getDescriptionFontSize());
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, 
ec.getConnectionDescription().getText(), schriftPosX, schriftPosY, 0);
cb.endText();

Doch leider wird dann im PDF eine andere Schriftgröße dargestellt (meistens genau um 4 mehr als in Java):
Gibt es vl eine Konstante mit der ich von Java nach PDF die Schriftgröße umrechnen kann?

javatopdf.png


mfg iflow
 

iflow

Mitglied
Wildcard hat gesagt.:
Warum zeichnest du das nicht einfach ins PDF anstatt den Text usw. händisch einzufügen?
Es gibt ja 2 Möglichkeiten um das PDF zu erzeugen, entweder die Objekte direkt reinschreiben oder mittels com.lowagie.text.pdf.PdfContentByte (so wie ich es mache) es selbst reinzuschreiben. Das muss ich machen weil z.B. die Rechtecke alle in einer Liste abgespeichert sind. Ein Rechteck ist aber ein jPanel Objekt mit eigener Beschriftung, Titel, Hintergrund- u. Vordergrundfarbe, Schriftart usw. und das muss ich doch selbst reinschreiben, bzw. hab ich keine Möglichkeit gefunden um das automatisch reinzuzeichnen.

Nur stellt sich jetzt die Frage, warum die Schriftgröße von Java zu PDF nicht übereinstimmt.
 

iflow

Mitglied
Wildcard hat gesagt.:
Hohl dir ein Graphics Objekt von iText und lass dein Panel darauf zeichnen -> fertig
Okay habe mit einem graphics2d objekt die Strings (Beschriftung in der vorigen Abbildung) rausgezeichnet -> Es hat sich nichts geändert, die Schriftgröße ist trotzdem um 4 punkte größer als im Java Programm.
 

Wildcard

Top Contributor
Ich kann dir nur sagen, das in unserer Anwendung das komplette Panel ins PDF gezeichnet wird und die Schriftgröße identisch ist.
Irgendwas musst falsch machen.
 

iflow

Mitglied
Hmm findes es einfach nicht raus, wie ich ein gesamtes JPanel ins PDF schreiben kann :(
Kannst du mir den Code oder eine Seite mit Code zeigen, bitte, danke :)
 

Wildcard

Top Contributor
iflow hat gesagt.:
Okay habe mit einem graphics2d objekt die Strings (Beschriftung in der vorigen Abbildung) rausgezeichnet -> Es hat sich nichts geändert, die Schriftgröße ist trotzdem um 4 punkte größer als im Java Programm.
Wenn du bereits ein Graphics Objekt von iText hast, was spricht dann gegen myPanel.paint(iTextGraphics) ?
 

iflow

Mitglied
Soda das funktioniert, aber die Qualität im PDF Dokument ist dann extrem schlecht, es sieht so aus als würde man einen Screenshot in Windows machen und das ganze in Paint einfügen -> also sehr verpixelt.

Gibt es eine Graphics Methode um die Qualität der Ausgabe (über die paint Methode) zu verbessern?
 

iflow

Mitglied
Sry für die späte Antwort:
Ich zeichne ein ganzes JPanel mit vielen Kind - JPanels:
Code:
PdfContentByte cs = writer.getDirectContent();
        java.awt.Graphics2D g2 = cs.createGraphicsShapes(2480f, 3508f);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        TWM.p_mainPanel.paint(g2);
        g2.dispose();
 

iflow

Mitglied
Wildcard hat gesagt.:
Schalte vorher das DoubleBuffering aus, sonst wird wohl nur ein Bild gezeichnet.

Versteh ich nicht.
Habe mich erst in das DoubleBuffering einlesen müssen, aber warum soll ich das deaktivieren?
Als ich es ausprobiert habe, ging gar nichts mehr ;)
 

Wildcard

Top Contributor
Wenn du DoubleBuffering verwendest, wird alles in ein Bild gezeichnet und das Bild dann ins PDF gezeichnet. Das ist nicht das selbe wie geometrische Formen und Schrift in das PDF zu zeichnen. Letzteres ist nämlich skalierbar und hat eine wesentlich bessere Qualität beim Drucken.
 

iflow

Mitglied
Soda es funktioniert alles jetzt recht gut, habe es so gelöst:

Code:
    public static void drawPdf(MainPanel mp) throws DocumentException, BadElementException, IOException {
        for (int i = 0; i < mp.getSites(); i++) {   //Solange Seiten vorhanden sind
            Graphics2D g2d = cb.createGraphicsShapes(PageSize.A4.getWidth() ,PageSize.A4.getHeight());
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            int verschiebenY = (i * mp.getSiteheight()) + (i * mp.getSeitenTrenner());
            mp.setDoubleBuffered(false);    
            AffineTransform matrix = new AffineTransform();
            matrix.scale(0.6, 0.6);     //Streckung (Verkleinerung)
            matrix.translate(0, verschiebenY * -1); //Verschiebung auf der Y-Achse
            g2d.transform(matrix);      //Verschiebungen und Streckungen auf das Grafikobjekt anwenden
            mp.paint(g2d);              //Gesamte Workflow Zeichenflaeche Grafik erstellen          
            g2d.dispose();              //Grafik Objekt freigeben
            cb.stroke();                //Pdf Seite beschreiben
            if(i != mp.getSites()) {    //Wenn die letzte Seite noch nicht erreicht ist
                document.newPage();     //Neue Seite erzeugen
            }
        }
    }

Warum ich das Bild genau um 0.6 mal kleiner machen muss weiß ich nicht, dass habe ich hingeraten, aber es passt anscheinend ganz genau :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Jave swing overly benutzten. AWT, Swing, JavaFX & SWT 3
J Anzeige ID und Markierung für Knoten in Eclipse & Swing AWT, Swing, JavaFX & SWT 4
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben