Hallo Leute,
vielleicht gehört dies eher in das Multivalent- Supportforum, aber da dieses Forum viel besser besucht ist, versuch ich hier mal mein Glück und hoffe, dass ihr mir vielliecht irgendwie helfen könnt.
Mein Problem ist folgendes....
Ich benutze zum Anzeigen in meinem Applet die Multivalent PDF-Komponente....
Bei einem bestimmten PDF treten jetzt folgende Probleme auf....
Massive Perfomance-probleme: ca. 5 Minuten zum Laden
Auf dem Dokument befinden sich Barcodes und diverse andere transformierte (skaliert, gedrehte) Images.... welche auch die Performanceprobleme verursachen.
Zudem werden die rotiert, gedrehten Images, der Barcode und ein paar Logos, völlig verzerrt dargestellt.
Leider kann ich das PDF wegen Datenschutz nicht posten.
Ich habe festgestellt, dass das ewige Laden scheins nur bei Images vorkommt, für die ich den Filter "DCTDecode" zurück bekomm. Hat wohl irgendwas mit der der JPEG-Komprimierung von Acrobat zu tun.
Die Methode, die eigentlich die ganze Zeit beansprucht ist folgende:
bufferedimage = affinetransformop.filter(bufferedimage, null);
Also, grob sieht das insgesamt in diesem Fall dann folgendermaßen aus:
Komischerweise funktioniert das Ganze, wenn ich mit Acrobat Professional eine PDF-Optimierung durchführe und folgende Angagen mache.
Umter Erweitert/PDF-Optimize...
deaktivier ich alle Optimierungen außer unter Bilder wähl ich bei Graustufenbilder das Kompressionsformat JPEG und unter Farbbilder wähl ich "bikubische Neuberechnung" 150 Zoll/Pixel bei bildern mit mehr als 250 Pixel/Zoll
und siehe da, das PDF wird danach in meiner Java-applikation innerhalb einer Sekunden völlig korrekt angezeigt.
Keine Ahnung, ob ihr mir mittels diesen Informationen irgendwie helfen könnt. Ich müsste es halt irgendwie schaffen, genau das gleiche, wie der Acrobat in meiner Java-anwendung machen, aber ich hab halt keine Ahnung....
Vielleicht hat ja jemand Lust von euch mitzugrübeln. Wär sehr dankbar... komm einfach nicht wirklich weiter an dem Problem....
Viele Grüße, Fabian
Leider halt nur decompilierter Code
vielleicht gehört dies eher in das Multivalent- Supportforum, aber da dieses Forum viel besser besucht ist, versuch ich hier mal mein Glück und hoffe, dass ihr mir vielliecht irgendwie helfen könnt.
Mein Problem ist folgendes....
Ich benutze zum Anzeigen in meinem Applet die Multivalent PDF-Komponente....
Bei einem bestimmten PDF treten jetzt folgende Probleme auf....
Massive Perfomance-probleme: ca. 5 Minuten zum Laden
Auf dem Dokument befinden sich Barcodes und diverse andere transformierte (skaliert, gedrehte) Images.... welche auch die Performanceprobleme verursachen.
Zudem werden die rotiert, gedrehten Images, der Barcode und ein paar Logos, völlig verzerrt dargestellt.
Leider kann ich das PDF wegen Datenschutz nicht posten.
Ich habe festgestellt, dass das ewige Laden scheins nur bei Images vorkommt, für die ich den Filter "DCTDecode" zurück bekomm. Hat wohl irgendwas mit der der JPEG-Komprimierung von Acrobat zu tun.
Die Methode, die eigentlich die ganze Zeit beansprucht ist folgende:
bufferedimage = affinetransformop.filter(bufferedimage, null);
Also, grob sieht das insgesamt in diesem Fall dann folgendermaßen aus:
Code:
if ("DCTDecode".equals(string))
bufferedimage = createJPEG(dict, inputstream, pdfreader); // ist ne Methode aus dem Multivalenttool, habe ich // unten noch hinzugefügt.
bufferedimage = affinetransformop.filter(bufferedimage, null); // benötigt 30s
Komischerweise funktioniert das Ganze, wenn ich mit Acrobat Professional eine PDF-Optimierung durchführe und folgende Angagen mache.
Umter Erweitert/PDF-Optimize...
deaktivier ich alle Optimierungen außer unter Bilder wähl ich bei Graustufenbilder das Kompressionsformat JPEG und unter Farbbilder wähl ich "bikubische Neuberechnung" 150 Zoll/Pixel bei bildern mit mehr als 250 Pixel/Zoll
und siehe da, das PDF wird danach in meiner Java-applikation innerhalb einer Sekunden völlig korrekt angezeigt.
Keine Ahnung, ob ihr mir mittels diesen Informationen irgendwie helfen könnt. Ich müsste es halt irgendwie schaffen, genau das gleiche, wie der Acrobat in meiner Java-anwendung machen, aber ich hab halt keine Ahnung....
Vielleicht hat ja jemand Lust von euch mitzugrübeln. Wär sehr dankbar... komm einfach nicht wirklich weiter an dem Problem....
Viele Grüße, Fabian
Leider halt nur decompilierter Code
Code:
static BufferedImage createJPEG(Dict dict, InputStream inputstream,
PDFReader pdfreader) throws IOException {
if (!$assertionsDisabled && (dict == null || inputstream == null))
throw new AssertionError();
ColorSpace colorspace = pdfreader.getColorSpace(dict.get("ColorSpace"),
null, null);
int i = 4;
int i_14_ = colorspace.getNumComponents();
if (i_14_ == 4) {
Object object = dict.get("Length");
byte[] is = InputStreams.toByteArray(inputstream,
(object != null ? (long) pdfreader.getObjInt(object)
: 10240L));
i = JPEG.getTransform(is);
inputstream = new ByteArrayInputStream(is);
}
ImageReader imagereader = (ImageReader) ImageIO
.getImageReadersByFormatName("JPEG").next();
ImageIO.setUseCache(false);
ImageInputStream imageinputstream = ImageIO
.createImageInputStream(inputstream);
imagereader.setInput(imageinputstream, true);
BufferedImage bufferedimage;
try {
if (i_14_ == 4 || colorspace instanceof ColorSpaceLab) {
ImageReadParam imagereadparam = imagereader
.getDefaultReadParam();
colorspace = (12 == i ? (ColorSpace) ColorSpaceCMYK
.getInstance() : 13 == i ? (ColorSpace) ColorSpaceYCCK
.getInstance() : colorspace);
Raster raster = imagereader.readRaster(0, imagereadparam);
raster = Rasters.toRGB(raster, colorspace);
ComponentColorModel componentcolormodel = new ComponentColorModel(
ColorSpace.getInstance(1000), false, true, 1, 0);
bufferedimage = new BufferedImage(componentcolormodel,
(WritableRaster) raster, true, null);
} else
bufferedimage = imagereader.read(0, null);
} catch (IOException ioexception) {
bufferedimage = null;
System.err.println("Couldn't read JPEG: " + ioexception);
}
imagereader.dispose();
imageinputstream.close();
return bufferedimage;
}