Carregando imagens para um fich PDF

4 respostas
T

Boas tardes… Recorro à vossa ajuda para tenter resolver o seguinte problema…

Tenhum a aplicação que converte imagens DICOM em PNG usando uma chamada ao sistema através de Runtime. Até qqui tudo bem…
O problema é quendo tento pegar nas imagens para montar num fich pdf a aplicação não consegue carregar as imagens… embora elas estejam lá…
se tentar correr a aplicação uma segunda vez não tem qualquer problema…

Alguem me pode ajudar? O código da aplicação é o seguinte:
public static void main(String[] args) throws IOException {
//execução do programa que converte as imagens DICOM para png

DicomConverter job = new DicomConverter();
    job.convert();
}
class executa extends Thread {
    public void run() {
        try {
            Runtime.getRuntime().exec(" dicom2 -p *.dcm");
            Thread.yield();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

public void  convert(){
    
    executa exe = new executa();
    convert conv = new convert();
    exe.setPriority(10);
    conv.setPriority(1);
    exe.start();
    conv.start();
}


class convert extends Thread {
    public void run() {
        Document document = new Document();
        int cont=0;
        //contagem do numero de ficheiros .dcm na directoria
        String dir = "c://convert//DICOM";
        File directory = new File(dir);
        String[] files = directory.list();
        for (int k = 0; k < files.length; k++){
            if(files[k].matches(".*dcm")){
                cont++;
            }
        }
        
        try {
            //criação do documento .pdf
            PdfWriter.getInstance(document, new FileOutputStream("c://convert//DICOM.pdf"));
            
            // abertura do ducumento
            document.open();
            
            // inserção das imagens
            for (int i=1; i<=cont; i++){
                //"carrega" a imagem
                Image img = Image.getInstance("teste"+i+".dcm.png");
                //dimensiona para 290x227 px
                img.scaleAbsolute(290,227);
                //verificação da posição
                int j= i%6;
                //posicionamento
                switch (j){
                    case 1: img.setAbsolutePosition(5,560);break;
                    case 2: img.setAbsolutePosition(300,560);break;
                    case 3: img.setAbsolutePosition(5,323);break;
                    case 4: img.setAbsolutePosition(300,323);break;
                    case 5: img.setAbsolutePosition(5,86);break;
                    case 0: img.setAbsolutePosition(300,86);break;
                }
                document.add(img);
                //à sexta imagem acrescenta uma página
                if(j==0){
                    document.newPage();
                }
            }
        } catch(DocumentException de) {
            System.err.println(de.getMessage());
        } catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        
        // fechar documento
        document.close();

4 Respostas

eduveks

Creio que como estas a usar Threads, enquanto tas a converter as imagens para PNG a thread do PDF ta a tentar carregar as imagens, e como estão ainda em processamento é capaz de ter ai algum conflito.

Pra além disto, tem certeza que isto funciona:
Image img = Image.getInstance(“teste”+i+".dcm.png");

Tenta um fazer um if com o new File(“teste”+i+".dcm.png").exists(), para garantir que quando chega ai o arquivo realmente existe.

E outra as imagens não estão em “c://convert//DICOM”???

Então não devia ser:

Image img = Image.getInstance(“c://convert//DICOM//teste”+i+".dcm.png");

T

boas… as threads foram testes… devia ter postado o código sem threads…:oops:
o carregamento das imagens dá-se sem problema logo que seja as imagens já estejam na directoria pelo que o problema não vem dái… O problema tá em que na execução do runtime. … as imagens devem ficar bloqueadas até ao fim da execução do script e por isso consegue aceder às mesmas…

Se eu dividir em duas aplicações funciona perfeitamente…
Não existe nenhuma maneira de obrigar o runtime a parar ou assim?

eduveks

Háaaaaaa agora sim, tocaste num ponto chave, eu já passei por situações destas…

Mas eu não consegui resolver, ai desisti e fiz de outra forma…

Ou seja não se se é possível para o Runtime, de maneira que libere o processo, não encontrei nenhuma forma de forçar isto…

Era bom e muito bom se descobrisse isto, e se descobrir posta aqui a resposta…

Mas em todo caso, te aconselho a abrir um novo tópico a perguntar sobre Runtime, que é capaz de conseguires mais respostas.

T

pois… tou a ver que vai ser complicado… de qualquer modo obrigado pela ajuda… se eu descobrir uma solução depois aviso…

:smiley:

Criado 3 de agosto de 2006
Ultima resposta 3 de ago. de 2006
Respostas 4
Participantes 2