Bu bağlantıda, görüntüyü kesmek ve her bir öğenin koordinatlarını ve boyutunu kaydetmek için esas olarak PS kullanıyoruz.
/ ** * Ürün resim alanı * / private Rectangle imageArea = new Rectangle (64, 64, 620, 620); / ** * Başlık alanı * / private Rectangle titleArea = new Rectangle (86, 712, 300, 64); / ** * Fiyat alanı * / özel Dikdörtgen fiyatAlanı = yeni Dikdörtgen (552, 720, 118, 43); / ** * QR kodu alanı * / private Rectangle qrcodeArea = new Rectangle (87, 830, 100, 100);Metin içeriği çizmek için drawString'i kullanırken, x, y koordinatlarını doldurmanız gerekiyorsa, kodda doğrudan ps'nin üzerindeki koordinatları kullanırsanız, konumun hiç doğru olmadığını göreceksiniz Neden?
Yazı tipinin yüksekliği birkaç unsurdan oluşur: yükselme, iniş
DrawString'de kullanılan y koordinatı, taban çizgisinin y koordinatına, yani yazı tipinin bulunduğu dikdörtgenin sol üst köşesinin y koordinatına atıfta bulunur + yükselme
// Metin kenar yumuşatmayı etkinleştirin g.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); private void drawTitle (ProductCard ürünü, Graphics2D g) { g.setColor (Color.decode ("# 666666")); g.setFont (yeni Yazı Tipi ("Şarkı Ti", Yazı Tipi.BOLD, 28)); int ascent = g.getFontMetrics (g.getFont ()). getAscent (); final Rectangle2D titleBounds = g.getFontMetrics (). getStringBounds (product.getTitle (), g); // Bir satırda en fazla 10 karakter final Dize başlığı = product.getTitle (); final int rowMaxWidth = titleArea.width; eğer (titleBounds.getWidth () > rowMaxWidth) { son karakter karakter = product.getTitle (). toCharArray (); for (int i = 0, w = 0, start = 0; i < chars.length; i ++) { w + = g.getFontMetrics (). charWidth (karakter ); eğer (w > = rowMaxWidth) { eğer (start == 0) { // ilk satırı yaz int y = titleArea.y + yükselme; g.drawString (title.substring (0, i), titleArea.x, y); start = i; w = 0; } else if (başla > 0) { // ikinci satırı yaz String part2 = title.substring (başlangıç, i); // Biraz eklemeniz gerekip gerekmediğini belirleyin eğer (titleBounds.getWidth () > rowMaxWidth * 2) bölüm2 + = "..."; // çizmek int padding = 5; int y = titleArea.y + ascent + titleArea.height / 2 + dolgu; g.drawString (bölüm2, titleArea.x, y); kırmak; } } } } Başka { g.drawString (başlık, titleArea.x, titleArea.y + yükseliş); } }Başlıktan sonra fiyat çok basit, kalan bir sorun var: Fiyat 4 haneyi aşarsa, resmi aşma problemi yaşanacaktır.Kabloyu değiştirebilir veya yazı tipi boyutunu ayarlayarak çözebilirsiniz.
g.setFont (yeni Yazı Tipi ("Arial", Yazı Tipi.BOLD, 48)); final FontMetrics fontMetrics = g.getFontMetrics (g.getFont ()); g.setColor (Color.decode ("# ff4f13")); g.drawString (product.getPrice (), priceArea.x, priceArea.y + fontMetrics.getAscent ());Bir QR kodu oluşturmak için üçüncü taraf bir bağımlılığa güvenmemiz gerekir
< !-- QR kod - > < bağımlılık > < Grup kimliği > com.google.zxing < /Grup kimliği > < artifactId > çekirdek < / artifactId > < versiyon > 3.3.0 < / version > < /bağımlılık > < bağımlılık > < Grup kimliği > com.google.zxing < /Grup kimliği > < artifactId > javase < / artifactId > < versiyon > 3.3.0 < / version > < /bağımlılık >QR kodu oluştur
// QR kodu resmi oluştur QRCodeWriter qrCodeWriter = yeni QRCodeWriter (); BitMatrix bitMatrix = qrCodeWriter.encode (product.getProductUrl (), BarcodeFormat.QR_CODE, qrcodeArea.width, qrcodeArea.height);Beyaz kenarlığı kaldır
genel statik BitMatrix deleteWhite (BitMatrix matrix) { int rec = matrix.getEnclosingRectangle (); int resWidth = kayıt + 1; int resHeight = kayıt + 1; BitMatrix resMatrix = new BitMatrix (resWidth, resHeight); resMatrix.clear (); for (int i = 0; i < resWidth; i ++) { for (int j = 0; j < resHeight; j ++) { eğer (matrix.get (i + rec, j + rec)) resMatrix.set (i, j); } } resMatrix döndür; }Kaynak adres: https://gitee.com/qiaohhgz/product-tools.git