Próbuję odczytać zawartość pliku PDF za pomocą modułu PDFBox Apache i zakodować go w base64, aby móc go przesłać strumieniowo w inne miejsce. Aby go zakodować, używam klasy commache Base64OutputStream. Jak tak,Testy Junit dla kodu zakodowanego w 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());
Wydaje się kodującego go, ale trzeba go zweryfikować poprzez napisanie testu junit aby sprawdzić poprawność ciąg base64. Wydaje się, że poniższe zdania nie mijają. Jakieś pomysły ?
assertTrue(content
.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"));
góry dzięki
Używanie wspólnego apache w "assertTrue (Base64.isBase64 (treść));" wydaje się działać dobrze. Czy ktoś może rzucić trochę światła na to, dlaczego regex nie działa? – nixgadgets
To dokładne wyrażenie działa dla mnie, próbowałem zrobić mały kod Java, aby go przetestować. Kompiluje się i działa poprawnie zarówno w Javie 6, jak i Java 7. https://gist.github.com/melwil/5508003 – melwil
Może napotkasz na łamanie linii? Lub brak dopełnienia z '='? Być może '+' może zostać przetłumaczone na przestrzeń w transporcie HTTP. –