Sto provando a leggere il contenuto di un PDF utilizzando il PDFBox di Apache e lo codifico in base64 in modo da poterlo riversare altrove. Per codificarlo, utilizzo la classe Base64OutputStream di Apache commons. Come così,Test di Junit per la stringa codificata in base64
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new Base64OutputStream(byteOutput);
List pages = pdfDocument.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while (iter.hasNext()) {
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map<String, PDXObjectImage> pageImages = resources.getImages();
if (pageImages != null) {
Iterator imageIter = pageImages.keySet().iterator();
while (imageIter.hasNext()) {
String key = (String) imageIter.next();
PDXObjectImage image = (PDXObjectImage) pageImages
.get(key);
image.write2OutputStream(base64Output);
}
}
}
String base64 = new String(byteOutput.toByteArray());
Sembra essere la codifica, ma ho bisogno di verificarlo scrivendo un test JUnit per convalidare la stringa base64. Il seguente non sembra passarlo. Qualche idea ?
assertTrue(content
.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"));
Grazie in anticipo
usando Apache del comune "assertTrue (Base64.isBase64 (tenore));" sembra funzionare bene. Qualcuno può per favore far luce sul motivo per cui la regex non funziona? – nixgadgets
L'esatta regex funziona per me, ho provato a creare un piccolo stub java per testarlo. Compila e funziona correttamente sia in Java 6 che in Java 7. https://gist.github.com/melwil/5508003 – melwil
Forse hai riscontrato interruzioni di riga? O manca il riempimento con '='? Forse '+' potrebbe essere tradotto nello spazio nel trasporto HTTP. –