2
2
import io .visual_regression_tracker .sdk_java .response .BuildResponse ;
3
3
import org .apache .commons .io .FilenameUtils ;
4
4
import org .apache .pdfbox .pdmodel .PDDocument ;
5
- import org .apache .pdfbox .rendering .ImageType ;
6
5
import org .apache .pdfbox .rendering .PDFRenderer ;
7
6
8
7
import javax .imageio .ImageIO ;
9
8
import java .awt .image .BufferedImage ;
9
+ import java .io .ByteArrayOutputStream ;
10
10
import java .io .File ;
11
11
import java .io .FileInputStream ;
12
12
import java .io .IOException ;
@@ -90,50 +90,35 @@ private static void runVRT(String apiUrl, String apiKey, String project, String
90
90
System .out .println ("ERROR: Ensure path " + filePath + " exists." );
91
91
System .exit (1 );
92
92
}
93
- //If the folder has pdf files, they will be converted to png to be able to compare.
94
- File [] fileList = file .listFiles ();
95
- for (File eachFile : fileList ) {
96
- if (FilenameUtils .getExtension (eachFile .getName ()).equalsIgnoreCase ("pdf" )) {
97
- PDDocument pdDocument = PDDocument .load (eachFile );
98
- PDFRenderer pdfRenderer = new PDFRenderer (pdDocument );
99
- for (int pageNumber = 0 ; pageNumber < pdDocument .getNumberOfPages (); ++pageNumber ) {
100
- BufferedImage bufferedImage = pdfRenderer .renderImageWithDPI (pageNumber , 300 , ImageType .RGB );
101
- ImageIO .write (bufferedImage , "PNG" , new File (eachFile .getPath ().replace (".pdf" , "_Page" ) + (pageNumber + 1 ) + ".png" ));
102
- }
103
- pdDocument .close ();
104
- }
105
- }
106
93
visualRegressionTracker .start ();
107
94
//Use the default options builder or custom options builder.
108
95
TestRunOptions .TestRunOptionsBuilder testRunOptionsBuilder = TestRunOptions .builder ();
109
96
//TestRunOptions.TestRunOptionsBuilder testRunOptionsBuilder = getTestRunOptionsBuilder();
110
- fileList = file .listFiles ();
97
+ File [] fileList = file .listFiles ();
111
98
for (File eachFile : fileList ) {
112
- String [] imageExtensions = {"png" };
99
+ String [] imageExtensions = {"png" , "pdf" };
113
100
if (Arrays .asList (imageExtensions ).contains (FilenameUtils .getExtension (eachFile .getName ()))) {
114
- FileInputStream fileInputStreamReader = new FileInputStream (eachFile );
115
- byte [] bytes = new byte [(int ) eachFile .length ()];
116
- fileInputStreamReader .read (bytes );
117
- String encodedBase64 = new String (Base64 .getEncoder ().encode (bytes ));
118
- fileInputStreamReader .close ();
119
- try {
120
- int countOfProcessed = results .get ("imageProcessedCount" ) == null ? 1 : Integer .parseInt (results .get ("imageProcessedCount" ).toString ()) + 1 ;
121
- results .put ("imageProcessedCount" , countOfProcessed );
122
- TestRunResult testRunResult = visualRegressionTracker .track (eachFile .getName (), encodedBase64 , testRunOptionsBuilder .build ());
123
- String result = String .valueOf (testRunResult .getTestRunResponse ().getStatus ());
124
- if (!result .equals ("OK" ) && !result .equals ("autoApproved" ))
125
- results .put ("allPassed" , false );
126
- int countOfResult = results .get (result ) == null ? 1 : Integer .parseInt (results .get (result ).toString ()) + 1 ;
127
- results .put (result , countOfResult );
128
- Object imageVerifiedCount = results .get ("imageVerifiedCount" );
129
- int countOfFilesVerified = imageVerifiedCount == null ? 1 : Integer .parseInt (imageVerifiedCount .toString ()) + 1 ;
130
- results .put ("imageVerifiedCount" , countOfFilesVerified );
131
- } catch (Exception ex ) {
132
- if (!(ex .getMessage ().contains ("No baseline:" ) || ex .getMessage ().contains ("Difference found" ))) {
133
- throw ex ;
134
- } else {
135
- results .put ("allPassed" , false );
101
+ //If the folder has pdf files, they will be converted to png to be able to compare.
102
+ if (FilenameUtils .getExtension (eachFile .getName ()).equalsIgnoreCase ("pdf" )) {
103
+ List <BufferedImage > bufferedImageList = getPDFPagesAsImages (eachFile );
104
+ for (int index = 0 ; index < bufferedImageList .size (); index ++) {
105
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream ();
106
+ BufferedImage bufferedImage = bufferedImageList .get (index );
107
+ ImageIO .write (bufferedImage , "PNG" , byteArrayOutputStream );
108
+ byte [] bytes = byteArrayOutputStream .toByteArray ();
109
+ String encodedBase64 = new String (Base64 .getEncoder ().encode (bytes ));
110
+ String screenshotName = eachFile .getName ().replace (".pdf" , "_Page" ) + (index + 1 ) + ".png" ;
111
+ runComparison (visualRegressionTracker , results , testRunOptionsBuilder , screenshotName , encodedBase64 );
112
+ bufferedImage .getGraphics ().dispose ();
113
+ bufferedImage .flush ();
136
114
}
115
+ } else {
116
+ FileInputStream fileInputStreamReader = new FileInputStream (eachFile );
117
+ byte [] bytes = new byte [(int ) eachFile .length ()];
118
+ fileInputStreamReader .read (bytes );
119
+ String encodedBase64 = new String (Base64 .getEncoder ().encode (bytes ));
120
+ fileInputStreamReader .close ();
121
+ runComparison (visualRegressionTracker , results , testRunOptionsBuilder , eachFile .getName (), encodedBase64 );
137
122
}
138
123
}
139
124
}
@@ -153,6 +138,41 @@ private static void runVRT(String apiUrl, String apiKey, String project, String
153
138
System .out .println (BOLD_TEXT + ANSI_GREEN + results + ANSI_RESET );
154
139
}
155
140
141
+ private static void runComparison (VisualRegressionTracker visualRegressionTracker , Map <String , Object > results , TestRunOptions .TestRunOptionsBuilder testRunOptionsBuilder , String screenshotName , String encodedBase64 ) throws IOException , InterruptedException {
142
+ try {
143
+ int countOfProcessed = results .get ("imageProcessedCount" ) == null ? 1 : Integer .parseInt (results .get ("imageProcessedCount" ).toString ()) + 1 ;
144
+ results .put ("imageProcessedCount" , countOfProcessed );
145
+ TestRunResult testRunResult = visualRegressionTracker .track (screenshotName , encodedBase64 , testRunOptionsBuilder .build ());
146
+ String result = String .valueOf (testRunResult .getTestRunResponse ().getStatus ());
147
+ if (!result .equals ("OK" ) && !result .equals ("autoApproved" ))
148
+ results .put ("allPassed" , false );
149
+ int countOfResult = results .get (result ) == null ? 1 : Integer .parseInt (results .get (result ).toString ()) + 1 ;
150
+ results .put (result , countOfResult );
151
+ Object imageVerifiedCount = results .get ("imageVerifiedCount" );
152
+ int countOfFilesVerified = imageVerifiedCount == null ? 1 : Integer .parseInt (imageVerifiedCount .toString ()) + 1 ;
153
+ results .put ("imageVerifiedCount" , countOfFilesVerified );
154
+ } catch (Exception ex ) {
155
+ if (!(ex .getMessage ().contains ("No baseline:" ) || ex .getMessage ().contains ("Difference found" ))) {
156
+ throw ex ;
157
+ } else {
158
+ results .put ("allPassed" , false );
159
+ }
160
+ }
161
+ }
162
+
163
+ private static List <BufferedImage > getPDFPagesAsImages (File eachFile ) throws Exception {
164
+ List <BufferedImage > bufferedImageList = new ArrayList <>();
165
+ try (PDDocument pdDocument = PDDocument .load (eachFile )) {
166
+ PDFRenderer pdfRenderer = new PDFRenderer (pdDocument );
167
+ for (int pageNumber = 0 ; pageNumber < pdDocument .getNumberOfPages (); ++pageNumber ) {
168
+ BufferedImage bufferedImage = pdfRenderer .renderImageWithDPI (pageNumber , 300 );
169
+ bufferedImageList .add (bufferedImage );
170
+ //ImageIO.write(bufferedImage, "PNG", new File(eachFile.getPath().replace(".pdf", "_Page") + (pageNumber + 1) + ".png"));
171
+ }
172
+ }
173
+ return bufferedImageList ;
174
+ }
175
+
156
176
private static TestRunOptions .TestRunOptionsBuilder getTestRunOptionsBuilder () {
157
177
//Use only the options you need in below line.
158
178
String maskData_x = "0" ;
0 commit comments