Italian Trasmettere un file PDF

AlpVir

Well-Known Member
Licensed User
Longtime User
Con il seguente codice trasmetto una immagine o un file PDF ad un programma da me sviluppato in VB6.

B4X:
'--- Trasmetto l'immagine
    Dim FileBuffer() As Byte
    Dim out As OutputStream
    out.InitializeToBytesArray(1000)
    c.Bitmap.WriteToStream(out, 100,  "JPEG")
    FileBuffer = out.ToBytesArray
    out.Close
    SendFile(FileBuffer)

     '--- Trasmetto il File pdf   
    'Dim FileBuffer() As Byte
    'FileBuffer=FileToBytes(File.DirRootExternal, NomeFilePDF)
    'SendFile(FileBuffer)

    '--- Per terminare
    msg="#FINE MODULO CONSENSO#"
    SendData(msg)

B4X:
Public Sub SendFile (data() As Byte)
    LogColor("Sub SendFile lung =" & data.Length,Colors.red)
    AStreams.Write(data)
End Sub

B4X:
Sub SendData(msg As String)
    LogColor("Sub SendData msg=" & msg,Colors.red)
    Dim Buffer() As Byte
    Buffer = msg.GetBytes("UTF8")
    AStreams.Write(Buffer)
    AStreams.Write(Array As Byte(254))
End Sub

Il programma su PC riceve la stringa #FINE MODULO CONSENSO# e visualizza un messaggio; a questo punto sono certo di aver ricevuto l'immagine e posso visualizzarla sul PC.
Se adesso voglio trasmettere un file PDF commento le prime 7 righe del codice e tolgo il commento alle 3 righe relative alla trasmissione del file PDF.
Ma - ahime - il programma non riceve più il messaggio di fine ricezione. Preciso che il file PDF viene effettivamente trasmesso e sono in grado di visualizzarlo sul PC.
Quale potrebbe essere la soluzione ?
Grazie per l'attenzione
 

udg

Expert
Licensed User
Longtime User
Io avrei utilizzato il Wait For per essere certo che la prima trasmissione dati (jpg/pdf) fosse conclusa con successo prima di inviare la seconda parte (il messaggio).
Un altro punto debole potrebbe essere l'utilizzo di AStreams (un unico oggetto) per entrambe le tarsmissioni; non è che si accavallano?
 

LucaMs

Expert
Licensed User
Longtime User
Come potrei implementare il Wait/For in questo contesto ?
Prova così (non testato, scritto direttamente qui).
Wait For (SendFile(FileBuffer)) Complete(UnaVariabile As Boolean)

B4X:
Public Sub SendFile (data() As Byte) As Resumable
    LogColor("Sub SendFile lung =" & data.Length,Colors.red)
    AStreams.Write(data)
    Wait For AStreams_Terminated ' supponendo che nella inizializzazione di AStreams come event name tu abbia usato "AStreams"
    Return True ' anche False funzionerebbe. Sarebbe il valore della UnaVariabile sopra
End Sub

Più o meno stessa cosa per il SendData (se il tutto funziona, ovviamente).
 
Last edited:
Top