Avatar billede william_munny Nybegynder
29. oktober 2004 - 15:26 Der er 6 kommentarer og
2 løsninger

JAVA print en hel folder af billed filer

Hej eksperter,
Jeg er Kunne godt tænke mig en lille app som kunne printe en hel folder af jpg billeder. Mit problem er at filerne variere i størelse fra 200kb til  1.5 mb. Har stykket noget kode sammen der printer en enkelt fil:

import javax.print.*;
import javax.print.attribute.*;
import java.io.*;

public class TestPrint {
  public static void main(String args[]) throws Exception {
    String filename = "C:\\IMAGES\\0000_001.jpg";
    PrintRequestAttributeSet pras =  new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;
   
    PrintService printService[] =  PrintServiceLookup.lookupPrintServices(flavor, pras);
    PrintService defaultService =  PrintServiceLookup.lookupDefaultPrintService();
   
    //Printer dialog
    PrintService service = ServiceUI.printDialog(null, 200, 200,  printService, defaultService, flavor, pras);
   
    if (service != null) {
      DocPrintJob job = service.createPrintJob();
      FileInputStream fis = new FileInputStream(filename);
      DocAttributeSet das = new HashDocAttributeSet();
      Doc doc = new SimpleDoc(fis, flavor, das);
      job.print(doc, pras);
    }
    System.exit(0);
  }

Så ved en fil på størelsen af ca 400kb kommer den op med OutOfMemoryException hvis jeg sætter den op til
"java -Xms12m -Xmx128m TestPrint" kan jeg godt få den skrevet ud. Hvad sker der så hvis jeg looper over alle filer i en folder med ca. 158 filer i?  Og hvorfor er det så memory krævende?
Avatar billede arne_v Ekspert
29. oktober 2004 - 19:12 #1
Den opbygger formentligt et print image i memory og det fylder meget.

Men det skulle ikke akkumuleres ved flere filer d.v.s. at du bare skal have
plads til den støreste fil.

Hvis du har nok RAM i maskinen så bare -Xmx256m eller -Xmx512m.
Avatar billede william_munny Nybegynder
02. november 2004 - 12:48 #2
Ok så i teorien skulle den godt kunne printe alle 158 filer, kan man flushe memory eller er det nok at sætte diverse objects til at være null ?
Avatar billede arne_v Ekspert
02. november 2004 - 19:35 #3
Bare sæt referncer til null, så vil JVM'en larve garbage colection, når den mangler
memory.
Avatar billede _carsten Nybegynder
02. november 2004 - 20:05 #4
Til tider, kan det i forbindelse med udskrivning være en fordel at kalde System.gc();
Skyldes formentlig at siden dannes udfra mængden af printerhukommelse
Din kode som udskriver siden/billedet bliver kaldt fra 1 til x antal gange
for at udskrive siden/billedet.

Prøv at indsætte System.gc() et eller andet sted efter PAGE_EXISTS.
Jeg siger ikke at det nødvendigvis hjælper, men chancen er tilstede.

Selv gør jeg kun brug af System.gc() i f.b.m. udskrivning.
Avatar billede william_munny Nybegynder
03. november 2004 - 15:00 #5
Ok har fået det til at spille men det tager mega lang tid. Så jeg tror jeg laver det om til en PDF først så laver den ikke så mange jobs og den kan printe på begge sider. men smid nogle svar.
Avatar billede _carsten Nybegynder
03. november 2004 - 15:59 #6
OK - svar
Avatar billede arne_v Ekspert
03. november 2004 - 16:06 #7
svar
Avatar billede william_munny Nybegynder
03. november 2004 - 16:07 #8
Sådan der
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester