Ich habe eine Frage zum Drucken zusätzlicher Informationen über Barcodes. Ich verwende http://barbecue.sourceforge.net/, um meine Barcodes zu erstellen.Wie kann Graphics2D Textqualität erhöht werden?
Nachdem ich meine Barcodes erstellt habe, möchte ich einige zusätzliche Informationen hinzufügen. Im Moment mache ich das auf folgende Weise! Zum Beispiel: die folgenden
Graphics2D g2d5 = container4Barcode.createGraphics();
g2d5.setBackground(Color.WHITE);
g2d5.clearRect(0, 33, 200, 200);
g2d5.setColor(Color.BLACK);
g2d5.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d5.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g2d5.setFont(new Font("Arial", Font.PLAIN, 8));
g2d5.drawString(barcode, 8, 40);
g2d5.drawString(generateRandomNumber(ekPreis), 57, 40);
String datumResult = datum;
g2d5.drawString(location, 98, 40);
g2d5.drawString(datum.substring(2), 114, 40);
g2d5.dispose();
Der Ausgang ist in einem pdf:
Wie Sie sehen können, ist die Qualität meines Textes (über und unter dem Barcode) ist wirklich schlecht ... Wie kann Ich erhöhe die Qualität des Textes, um den Text glatter und nicht pixelig zu machen ?!
(Wenn ich meine Barcodes gedruckt werden, sehen die Barcodes sehr pixelig ...)
Irgendwelche Tipps?
UPDATE:
Also, ich ein Bild von meinem neuesten Ergebnisse hier hinzugefügt ... Wenn ich diese Barcodes ausdrucken, sie sehen schrecklich! Also hier ist der Code, was ich getan habe:
Graphics2D g2d6 = container4Barcode.createGraphics();
g2d6.setColor(Color.black);
g2d6.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d6.setFont(new Font("Verdana", Font.BOLD, 7));
g2d6.drawString("FLORETT", 9, 20);
g2d6.drawString("50-521-60", 57, 20);
Graphics2D g2d4 = container4Barcode.createGraphics();
g2d4.setColor(Color.black);
g2d4.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d4.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d4.setFont(new Font("Verdana", Font.BOLD, 11));
g2d4.drawString("SSYYS", 105, 19);
g2d4.dispose();
Mit diesem Code bekomme ich die besten Ergebnisse! Natürlich habe ich mit "Metrics, AA_GASP, LCS_HRGB, verschiedenen Schriftarten (Verdana ist meiner Meinung nach die beste)" und vielem mehr gespielt, aber einige davon konnte ich nicht verwenden, weil dann mein Barcode verschwommen wurde! So forciert ich das Problem, dass ich die Qualität meiner Text-Qualität des Drawstrings von graphics2d nicht verbessern kann!
Also, ich möchte fragen, ob es eine Möglichkeit gibt, die "SSYYS" (Schriftgröße 11) und die "FLORETT" (Schriftgröße 7) viel schöner aussehen zu lassen! Gibt es eine Möglichkeit in JAVA, "glatten" Text auf ein Bild mit einer Schriftgröße kleiner als "12" zu zeichnen? Gibt es einen Workaround dafür? Wie Sie die Buchstaben „S und Y“ sehr schrecklich aussehen in dem Bild sehen kann ...
2. Update:
Einige Beispiel-Code so weit ... Bitte stellen Sie sicher, dass der folgende Ordner vorhanden ist: C: \ TestBarcodes \
Hoffe, dass ich meinen Code auf ein Minimum reduziert, die man sich vorstellen kann, was mein Problem ist ...
package generator;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeException;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.output.OutputException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
public class BarcodeGen {
// sets the picWidth
private static int picWidth = 149;
// sets the picHeigth
private static int picHeigth = 60;
public static void main(String[] args)
throws BarcodeException, OutputException, COSVisitorException, IOException {
generateBarcode("11138500");
}
public static void generateBarcode(String barcode)
throws IOException, COSVisitorException, BarcodeException, OutputException {
Barcode barcode2 = BarcodeFactory.createCode39(barcode, false);
int gw = barcode2.getWidth();
// change this to suit if you want higher, default 50
// barcode2.setBarWidth(50);
// this sets DPI
barcode2.setResolution(100);
// barcode2.setFont(font);
int gh = barcode2.getHeight();
// change this if you want a coloured background
// image = new BufferedImage(t, s, BufferedImage.TYPE_INT_RGB)
BufferedImage image = new BufferedImage(gw, gh, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) image.getGraphics();
// default is black so draw a white box first
// change type to INT_RGB if you want a coloured background
g2.setColor(Color.white);
g2.fillRect(0, 0, gw, gh);
barcode2.draw(g2, 0, 0);
// CREATE ADDITIONAL INFORMATION ON BARCODE
BufferedImage container4Barcode = new BufferedImage(
picWidth, picHeigth, image.getType());
Graphics2D g2d = container4Barcode.createGraphics();
g2d.setBackground(Color.WHITE);
g2d.clearRect(0, 0, picWidth, picHeigth);
g2d.setColor(Color.black);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
g2d.drawImage(image, 8, 21, 130, 18, null);
g2d.dispose();
Graphics2D g2d6 = container4Barcode.createGraphics();
g2d6.setColor(Color.black);
g2d6.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d6.setFont(new Font("Verdana", Font.BOLD, 7));
g2d6.drawString("FLORETT", 9, 20);
g2d6.drawString("50-521-60", 57, 20);
Graphics2D g2d4 = container4Barcode.createGraphics();
g2d4.setColor(Color.black);
g2d4.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d4.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d4.setFont(new Font("Verdana", Font.BOLD, 11));
g2d4.drawString("SSYYS", 105, 19);
g2d4.dispose();
// PRINT PDF
int ver = 782;
PDDocument doc = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
doc.addPage(page);
PDXObjectImage image2 = new PDJpeg(doc, container4Barcode);
PDPageContentStream content = new PDPageContentStream(doc, page);
content.drawImage(image2, 5, ver);
content.close();
doc.save(new FileOutputStream("C:\\TestBarcodes\\barcode.pdf"));
// opens the pdf file
Process p = Runtime
.getRuntime()
.exec("rundll32 url.dll,FileProtocolHandler C:\\TestBarcodes\\barcode.pdf");
try {
p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Experimentieren Sie einfach mit den Möglichkeiten, indem Sie den Code auf [diese Antwort] verwenden (http://stackoverflow.com/questions/5995798/java-text-on-image/5998015#5998015). –
Vielen Dank für Ihren Beitrag, aber das hat nicht geholfen:/Ich habe die letzten 5 Tage gespielt, um die Qualität des Textes zu verbessern ... ABER ich habe es nicht geschafft ... Es ist sehr pixelig !! Gibt es eine weitere Möglichkeit, die Qualität des Textes zu erhöhen? Etwas anderes als Graphics2D? Oder kann Java mit so einer kleinen Schriftgröße nicht umgehen? Ich habe meinen Beitrag aktualisiert, dass Sie sehen können, was ich bis jetzt habe, aber sogar die "SSYYS" (Schriftgröße 13 ist sehr pixelig) ... – Sway
Nächste Ebene der Hilfe. Um schneller Hilfe zu bekommen, schreiben Sie eine [SSCCE] (http://sscce.org/). –