2016-04-06 9 views
1

Mein Problem ist folgendes: Ich versuche Barcode-Generator online über WebBrowser zu öffnen und Barcode-Bild zu bekommen. Hier ist mein Code:Kann nicht aktualisiert Barcode-Bild über geöffnet in WebBrowser-Site

/// <summary> 
/// Main form of barcode server 
/// </summary> 
public partial class MainForm : Form 
{ 
    #region Constants 
    private const String BarCodeSite = "http://www.abarcode.net/online.aspx?barcode=EAN13";//"http://barcode.tec-it.com/en#"; 
    #endregion 

    /// <summary> 
    /// Main form constructor 
    /// </summary> 
    public MainForm() 
    { 
     InitializeComponent(); 
    } 

    /// <summary> 
    /// This event occured after form load 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void MainForm_Load(object sender, EventArgs e) 
    { 
     webBrowser.Navigate(new Uri(BarCodeSite)); 
    } 


    /// <summary> 
    /// Occurs when form is closing. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void MainForm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     try 
     { 
      barcodeServer.Abort(); 
     } 
     catch (Exception ex) 
     { 
      // do nothing 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var code = textBox1.Text; 
     var editText = webBrowser.Document.GetElementById("ValueToEncode"); 
     editText.SetAttribute("Value", code.Trim(new char[] { '\0' })); 
     webBrowser.Document.GetElementById("Label13").InvokeMember("click"); 
    } 
} 

Welche Maßnahmen i ausführen: 1. Führen Sie mein Projekt 2. Optionen Bild vergrößern 250% 3. Paste in textBox1 controle Code 8414034620202 4. auf Button1 klicken Perform wählen

Erwartetes Ergebnis: Barcode in das Textfeld eingegeben und Bild entsprechend dem eingegebenen Barcode aktualisiert Tatsächliches Ergebnis: Barcode in das Textfeld eingegeben, Bild wurde jedoch nicht aktualisiert. Ich kann nicht verstehen, warum mein Bild nicht aktualisiert wird. Mache ich etwas falsch?

Anmerkungen: Id "ValueToEncode" gehört gehört Feld Id "Label13" in Text mit Text Text-Label "Daten zu kodieren:" Website die ich verwendet habe: http://www.abarcode.net/online.aspx?barcode=EAN13

Antwort

0

Vorausgesetzt, dass es erlaubt ist, Wenn Sie nicht auf das WebBrowser-Steuerelement angewiesen sind, da es viele Macken hat, sind Sie besser dran.

In Ihrem speziellen Fall zwei einfache HttpWebRequest Anrufe ist alles, was Sie den generierten Barcode-Bild bekommen müssen:

CookieContainer cookies = new CookieContainer(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    // do a get to have the session cookie 
    var wr = (HttpWebRequest) WebRequest.Create("http://www.abarcode.net/online.aspx"); 
    wr.CookieContainer = cookies; 
    wr.Method = "GET"; 
    var stream = wr.GetResponse().GetResponseStream(); 
    using(var sr = new StreamReader(stream)) 
    { 
     // debug 
     Debug.WriteLine(sr.ReadToEnd()); 
    } 
    // get the image 
    var imageReq = (HttpWebRequest)WebRequest.Create(
     String.Format(
      "http://www.abarcode.net/barcode.aspx?value={0}&type=EAN13", 
      textBox1.Text)); 
    // this makes if you get their watermark in the barcode or not 
    imageReq.Referer = "http://www.abarcode.net/online.aspx?barcode=EAN13"; 
    imageReq.CookieContainer = cookies; 
    imageReq.Method = "GET"; 
    // get the image stream 
    using(stream = imageReq.GetResponse().GetResponseStream()) 
    { 
     // create the bitmap. 
     pictureBox1.Image = Bitmap.FromStream(stream); 
    } 
} 

ich eine CookieContainer haben über die WebRequest Anrufe, die Cookies zu erfassen und wiederverwenden. Die einzige spezielle Sache, die ich hinzufügen musste, war der Referer-Header, um zu verhindern, dass das Wasserzeichen auftauchte.

Ihr Ergebnis wird wie folgt aussehen:

barcode

+0

Danke, rene. Ihre Antwort ist sehr hilfreich. Kann ich diese Lösung verwenden, um mehr als 100 Barcode-Bilder nacheinander zu erhalten? Ich meine, gibt es Captha oder so? – ichernob

+0

Ich weiß nicht, Sie müssen mit dem Besitzer dieser Website überprüfen, ob das erlaubt ist. Wenn Sie so viele brauchen, würde ich eher nach einem Strichcodegenerator als Bibliothek suchen. Vielleicht hat Github ein paar Open Source-Sachen, die du benutzen kannst. EAN13 ist nicht zu komplex, also erwarte ich, dass jemand zuvor etwas Nützliches gemacht hat. – rene

Verwandte Themen