@ -62,7 +62,7 @@ public final class QrCodeGeneratorDemo {
File imgFile = new File ( "hello-world-QR.png" ) ; // File path for output
ImageIO . write ( img , "png" , imgFile ) ; // Write image to file
String svg = qr. toSvgString( 4 ) ; // Convert to SVG XML code
String svg = toSvgString( qr , 4 ) ; // Convert to SVG XML code
File svgFile = new File ( "hello-world-QR.svg" ) ; // File path for output
Files . write ( svgFile . toPath ( ) , // Write image to file
svg . getBytes ( StandardCharsets . UTF_8 ) ) ;
@ -204,4 +204,41 @@ public final class QrCodeGeneratorDemo {
ImageIO . write ( img , "png" , new File ( filepath ) ) ;
}
/ * *
* Returns a string of SVG code for an image depicting the specified QR Code , with the specified
* number of border modules . The string always uses Unix newlines ( \ n ) , regardless of the platform .
* @param qr the QR Code to render ( not { @code null } )
* @param border the number of border modules to add , which must be non - negative
* @return a string representing the QR Code as an SVG XML document
* @throws NullPointerException if the QR Code is { @code null }
* @throws IllegalArgumentException if the border is negative
* /
private static String toSvgString ( QrCode qr , int border ) {
Objects . requireNonNull ( qr ) ;
if ( border < 0 )
throw new IllegalArgumentException ( "Border must be non-negative" ) ;
long brd = border ;
StringBuilder sb = new StringBuilder ( )
. append ( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" )
. append ( "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" )
. append ( String . format ( "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 %1$d %1$d\" stroke=\"none\">\n" ,
qr . size + brd * 2 ) )
. append ( "\t<rect width=\"100%\" height=\"100%\" fill=\"#FFFFFF\"/>\n" )
. append ( "\t<path d=\"" ) ;
for ( int y = 0 ; y < qr . size ; y + + ) {
for ( int x = 0 ; x < qr . size ; x + + ) {
if ( qr . getModule ( x , y ) ) {
if ( x ! = 0 | | y ! = 0 )
sb . append ( " " ) ;
sb . append ( String . format ( "M%d,%dh1v1h-1z" , x + brd , y + brd ) ) ;
}
}
}
return sb
. append ( "\" fill=\"#000000\"/>\n" )
. append ( "</svg>\n" )
. toString ( ) ;
}
}