Endlich habe ich es geschafft. Es war viel einfacher und beinhaltete nicht einmal MIME. Der Trick bestand darin, die Image-Tags in der Arbeits HTML zu ändern, dem Base64-codiertes Bild enthalten, so dass der src-Tag dieses Format (hier mit einem gif als Beispiel gezeigt) verwenden:
src="data:image/gif;base64,<base64 encoded image>"
Ich hatte bereits der Code erforderlich um den HTML aus dem Rich-Text-Feld zu bekommen (siehe my blog post bereits in meiner Frage erwähnt). Alles, was ich brauchte, war, die Bild-src-Tags durch das korrekte src-Format einschließlich des base64-codierten Bildes zu ersetzen.
dem folgenden Code wird das HTML und geht durch jede der enthaltenen Bilder und modifiziert die src-Tag:
String html = this.document.getValue(fieldName).toString();
if (null != html) {
final List<FileRowData> fileRowDataList = document.getEmbeddedImagesList(fieldName);
if (null != fileRowDataList) {
final Matcher matcher = imgRegExp.matcher(html);
while (matcher.find()) {
String src = matcher.group();
final String srcToken = "src=\"";
final int x = src.indexOf(srcToken);
final int y = src.indexOf("\"", x + srcToken.length());
final String srcText = src.substring(x + srcToken.length(), y);
for (FileRowData fileRowData : fileRowDataList) {
final String srcImage = fileRowData.getHref();
final String cidImage = ((AttachmentValueHolder) fileRowData).getCID();
final String typeImage = ((AttachmentValueHolder) fileRowData).getType();
final String persistentName = ((AttachmentValueHolder) fileRowData).getPersistentName();
// Add base 64 image inline (src="data:image/gif;base64,<name>")
if (srcText.endsWith(srcImage)) {
final String newSrc = src.replace(srcText, "data:" + typeImage + ";base64," + getBase64(persistentName));
html = html.replace(src, newSrc);
}
}
}
}
}
Hier ist die getBase64() -Methode, die base64 ein Bild kodiert:
private String getBase64(final String fileName) {
String returnText = "";
try {
BASE64Encoder base64Enc = new BASE64Encoder();
ByteArrayOutputStream output = new ByteArrayOutputStream();
base64Enc.encode(this.getEmbeddedImageStream(fileName), output);
returnText = output.toString();
} catch (NotesException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return returnText;
}
Ein Teil des Codes stammt aus der emailBean by Tony McGuckin.
Einige MIME-Magie ist erforderlich. Ich versuche etwas für dich zu kochen. – stwissel