Avatar billede joeblack Nybegynder
21. december 2008 - 12:08 Der er 33 kommentarer og
1 løsning

Indhent underskrift i browser

Hej Eksperter !

Jeg ved ærlig talt ikke, hvilken katagori jeg skal stille dette spørgsmål i...

Vi tænker på at lade vores kørende folk indhente informationer online og skal i den forbindelse have kundens underskrift på ordren. Jeg tænker på at købe tablet pc'ere med 3G til dem, lave div. forms mv. i asp og så lade kunden underskrive formen på tablet pc'en.
Jeg kan bare ikke finde noget kode/en applet, som kan indhente underskriften, gemme/sende den som gif/jpeg eller lign.

Nogen, der har prøvet det før ?
Avatar billede arne_v Ekspert
21. december 2008 - 17:37 #1
Her er en lille demo til inspiration:

sign.asp
--------

<%
fnm = "foobar.jpg"
%>
<applet codebase="." code="SignatureApplet.class" width="750" height="250">
<param name="filename" value="<%=fnm%>">
</applet>

upload.asp
----------

<%
adTypeBinary = 1
adSaveCreateOverWrite=2
uploaddir = Server.MapPath("upload")
filename = Request.QueryString("filename")
data = Request.BinaryRead(Request.TotalBytes)
Set binstm = CreateObject("ADODB.Stream")
binstm.Type = adTypeBinary
binstm.Open
binstm.Write data
binstm.SaveToFile uploaddir & "\" & filename, adSaveCreateOverWrite
%>

SignatureApplet.java
--------------------

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class SignatureApplet extends JApplet implements ActionListener {
    private final static String UPLOAD_URL = "http://localhost/upload.asp";
    private SignatureField sf;
    public void init() {
        setLayout(new BorderLayout());
        sf = new SignatureField();
        getContentPane().add(sf, BorderLayout.CENTER);
        JButton btn = new JButton("Submit");
        btn.addActionListener(this);
        getContentPane().add(btn, BorderLayout.SOUTH);
    }
    @Override
    public void actionPerformed(ActionEvent ev) {
        try {
            String filename = this.getParameter("filename");
            URL url = new URL(UPLOAD_URL + "?filename=" + filename);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            OutputStream os = con.getOutputStream();
            ImageIO.write(sf.getImg(), "jpeg", os);
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                JOptionPane.showMessageDialog(this, "Signature uploaded");
            } else {
                JOptionPane.showMessageDialog(this, "Signature not uploaded");
            }
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Signature not uploaded");
        }
    }
}

class SignatureField extends JPanel implements MouseMotionListener {
    private final static int W = 750;
    private final static int H = 250;
    private BufferedImage img;
    public SignatureField() {
        img = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
        Graphics g = img.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, W, H);
        setPreferredSize(new Dimension(W, H));
        this.addMouseMotionListener(this);
    }
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this);
    }
    public BufferedImage getImg() {
        return img;
    }
    @Override
    public void mouseDragged(MouseEvent ev) {
        Graphics g = img.getGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(ev.getPoint().x, ev.getPoint().y, 1, 1);
        repaint();
    }
    @Override
    public void mouseMoved(MouseEvent ev) {
    }
}
Avatar billede joeblack Nybegynder
21. december 2008 - 18:28 #2
Hej Arne
- og tak for dit svar.

Jeg er ingen ørn til java.
Ovenstående skal vel gemmes i to forskellige filer ? (en .asp og en .class ?)
Avatar billede joeblack Nybegynder
21. december 2008 - 18:29 #3
Undskyld, 3 filer ser jeg nu. Jeg prøver lige...
Avatar billede arne_v Ekspert
21. december 2008 - 18:36 #4
Java filen skal oversættes til en class fil med en Java compiler.

Og der skal formentligt tilrettes lidt hist og pist.
Avatar billede joeblack Nybegynder
21. december 2008 - 18:38 #5
Hmm...Får en fejl.

Jeg har omdøbt SignatureApplet.java til SignatureApplet.class, som bliver kaldt i sign.asp, men får stadig blot "Error" i hjørnet af applet'ens felt.

Idéer ?
Avatar billede joeblack Nybegynder
21. december 2008 - 18:39 #6
Ved du hvor, jeg finder en compiler ? jeg er som nævnt ret blank fsva. java (fremgår vel allerede af mine besvarelser :-)
Avatar billede arne_v Ekspert
21. december 2008 - 18:52 #7
Avatar billede joeblack Nybegynder
21. december 2008 - 19:00 #8
ok, jeg downloader.
Et par hurtige spørgsmål imens..
1. Kan jeg regne med, at jeg kan køre applets på mit webhotel ?
2. Gemmer ovenstående underskriften som en (billed)fil på serveren ?
Avatar billede arne_v Ekspert
21. december 2008 - 19:03 #9
re 1)

Ja. Set fra serverens side er en applet bare en fil ligesom alt andet. Det eneste
du skal checke er om den får sendt den ned som binær fil.

re 2)

Hvsi du kigger på upload.asp, så kan du se hvor den gemmer henne.
Avatar billede joeblack Nybegynder
21. december 2008 - 19:07 #10
hvad med filnavnet ?

Betyder "String filename = this.getParameter("filename");" at der spørges om filnavnet eller er det muligt at generere et random filnavn og gemme det i en variabel ?
Avatar billede arne_v Ekspert
21. december 2008 - 19:27 #11
filename sættes i sign.asp - jeg har kun puttet noget dummy kode ind - du må tilrette
det så det passer med resten af din logik - der skal vel være et eller andet faktura nummer
eller lignende
Avatar billede joeblack Nybegynder
21. december 2008 - 19:41 #12
Hej igen

Kan du hjælpe mig - jeg ved ikke, hvordan jeg compiler java-koden...
Jeg har installeret som du har skrevet, men hvad så ?
Avatar billede arne_v Ekspert
21. december 2008 - 20:00 #13
\detdirhvorjavaligger\bin\javac SignatureApplet.java
Avatar billede arne_v Ekspert
21. december 2008 - 20:00 #14
.java filen skal ikke på web server, men begge de genererede .class filer skal på
web serveren
Avatar billede joeblack Nybegynder
21. december 2008 - 20:09 #15
Tak for tålmodigheden.

Får blot en fejl - hvor skal jeg ligge SignatureApplet.java, for at compileren kan finde den ?
Avatar billede arne_v Ekspert
21. december 2008 - 20:24 #16
Du gemmer .java filer, åbner en kommando prompt, skifter til det dir hvor du har gemt
.java filen og bruger javac kommandoen.
Avatar billede joeblack Nybegynder
21. december 2008 - 20:57 #17
Det er gjort og den tænker et øjeblik og kommer ikke med nogen fejlmeddelse. Men jeg kan ikke finde nogle class-filer i dir'et (eller nogle andre steder)...
Avatar billede arne_v Ekspert
21. december 2008 - 21:13 #18
\detdirhvorjavaligger\bin\javac SignatureApplet.java

skal enten give en fejl meddelse eller nogle class filer i samme dir.
Avatar billede joeblack Nybegynder
21. december 2008 - 21:37 #19
OK, så langt så godt. Nu kan jeg tegne med musen, men ingenting sker, når jeg trykker submit. Nogle bud ?
Avatar billede arne_v Ekspert
21. december 2008 - 22:09 #20
Er upload.asp på plads ?

Fik du rettet UPLOAD_URL til ?
Avatar billede joeblack Nybegynder
21. december 2008 - 22:14 #21
jep, upload er på plads. UPLOAD_URL er rettet til blot upload.asp (alle filer ligger i samme mappe.
Avatar billede joeblack Nybegynder
21. december 2008 - 22:15 #22
og det var upload.asp, der er på plads..
Avatar billede arne_v Ekspert
21. december 2008 - 22:25 #23
UPLOAD_URL er ikke relativ til noget som helst. Enten skal du bruge fuld URL eller
så skal der tilføjes noget kode.
Avatar billede joeblack Nybegynder
21. december 2008 - 22:27 #24
Jeg har også prøvet den fulde sti inkl http://www, men stadig ingenting sker.
Avatar billede joeblack Nybegynder
21. december 2008 - 22:52 #25
Har du en idé om, hvad jeg kan gøre Arne ?
Avatar billede arne_v Ekspert
21. december 2008 - 23:44 #26
Får du ikke en popup box når du klikker submit ?
Avatar billede joeblack Nybegynder
22. december 2008 - 07:27 #27
Nej, ingen popup. Der sker ingenting, ikke engang en fejlmeddelelse...
Avatar billede arne_v Ekspert
22. december 2008 - 14:52 #28
Check i Java console for fejlmeddeleser.
Avatar billede joeblack Nybegynder
22. december 2008 - 16:35 #29
Hej igen
Nu kommer beskeden "Signature not uploaded" - så blev vi lidt klogere :-)

Jeg har startet "Java Monitoring and Management Console", men kan ikke finde et sted, hvor der er - eller måske burde være - eventuelle fejlmeddelelser. Hvor skal jeg kigge, så vi kan finde den sidste lille hurdle ?
Avatar billede arne_v Ekspert
22. december 2008 - 18:10 #30
Proev og ret koden fra:

            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                JOptionPane.showMessageDialog(this, "Signature uploaded");
            } else {
                JOptionPane.showMessageDialog(this, "Signature not uploaded");
            }
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Signature not uploaded");
        }

til:

            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                JOptionPane.showMessageDialog(this, "Signature uploaded");
            } else {
                JOptionPane.showMessageDialog(this, "Signature not uploaded : " + con.getResponseMessage());
            }
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Signature not uploaded: " + ex);
        }

saa vil vi blive klogere om hvad der gaar galt !
Avatar billede joeblack Nybegynder
22. december 2008 - 22:13 #31
Jep, det gav lidt: "Signature not uploaded : Internal Server Error"...
Avatar billede arne_v Ekspert
23. december 2008 - 00:36 #32
Så er det upload.asp som fejler !

Har du oprettet uploaddir og har IIS brugernavnet skrive adgang til det ?
Avatar billede joeblack Nybegynder
23. december 2008 - 11:49 #33
Works like a charm :-)

1000 tak for hjælpen !

Drop et svar, så du kan få dine velfortjente point.
Avatar billede arne_v Ekspert
23. december 2008 - 14:42 #34
svar
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