+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: VBScript da html a pdf in out of memory

  1. #1
    L'avatar di Franco_0412
    Franco_0412 non è in linea Novello
    Post
    4

    VBScript da html a pdf in out of memory

    Ciao a tutti,
    ho creato uno script per convertire file html (nidificati in un nas) in formato pdf; lo script di per se funziona bene, da principio avveniva un certo consumo di risorse, poi mi sono reso conto che i file erano davvero troppi

    Infatti dopo diversi minuti di elaborazione la ram viene allocata totalmente dal processo di acrobat che viene richiamato dallo script per fare la conversione e si ottiene l'errore "Out of memory"

    Posto di seguito il codice:

    codice:
    Option Explicit
    
    Dim AcroApp, objAVDoc, objFSO, objPDDoc, objFolder, colFiles, objStartFolder, objFile, strFileName, strFileName1, Subfolder, Files, objFileToWrite, StartTime, EndTime, Response
    
    Set AcroApp = CreateObject("AcroExch.App")
    AcroApp.Hide
    
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    
    objStartFolder = "C:\Users\Documents\tmp\"
    
    StartTime = Timer()
    
    ShowSubfolders objFSO.GetFolder(objStartFolder)
    
    Sub ShowSubFolders(Folder)
    
        For Each Subfolder in Folder.SubFolders 
            Set objFolder = objFSO.GetFolder(Subfolder.Path) 
            Set colFiles = objFolder.Files
    
            for each Files in colFiles 
    			strFileName = Mid(Files, InStrRev(Files, "\") + 1)
    			strFileName1 = Left(strFileName, InStrRev(strFileName, ".") - 1)
                if LCase(InStr(1,Files, ".html")) > 1 then 
    				Set objAVDoc = CreateObject("AcroExch.AVDoc")
    				objAVDoc.Open Files, ""
    				Set objPDDoc = objAVDoc.GetPDDoc
    				objPDDoc.Save 1, "C:\Users\Documents\tmp\" & strFileName1 & ".pdf"
    				objPDDoc.Close
    				objAVDoc.Close -1
    			End if
            next
            ShowSubFolders Subfolder 
        Next 
    End Sub
    
    Set objPDDoc = Nothing
    Set objAVDoc = Nothing
    AcroApp.Exit
    Set AcroApp = Nothing
    
    EndTime = Timer()
    Wscript.Echo "Finito: " & FormatNumber(EndTime - StartTime, 2)/60
    Qualcuno ha idea di come ovviare al problema dell'errore ?

    Grazie in anticipo
    Franco

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,955
    Blogs
    5
    Il messaggio era in moderazione. E' stato accettato.

    Correggo il titolo ... è VBScript non WBScript ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,955
    Blogs
    5
    Questa linea

    Set objAVDoc = CreateObject("AcroExch.AVDoc")

    va sicuramente fuori dal ciclo. Non puoi creare tutti questi oggetti AcroExch ... non ha senso ... devi crearne uno solo come per fso.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  4. #4
    L'avatar di Franco_0412
    Franco_0412 non è in linea Novello
    Post
    4
    Ok farò qualche test per vedere se cambia qualcosa, per il momento ti ringrazio Antonio.

    Ciao
    Franco

  5. #5
    L'avatar di Franco_0412
    Franco_0412 non è in linea Novello
    Post
    4
    Niente, purtroppo togliendo dal ciclo la creazione dell'oggetto, a circa 230 file generati mi ha già allocato 8gb di ram
    mi sa che qui bisognerebbe trovare un modo per uscire dal ciclo per settare nulle le variabili ed uscire dall'app per deallocare la ram, ma poi però dovrei ripartire nel punto esatto di dov'ero rimasto; con la nidificazione di cartelle con cui ho a che fare, la vedo dura

    Si potrebbe appoggiarsi anche ad un software di terze parti che fa la conversione da html a pdf, ma solo a patto che questa possa avvenire in background e via batch.

    Se qualcuno ha consigli da darmi, li prendo volentieri

    Franco

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,955
    Blogs
    5
    Fermo restando che quella linea va esclusa dal for come ti dicevo, prova ad aggiungere (dopo le due Close)

    Set objPDDoc = Nothing
    Set objAVDoc = Nothing
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    L'avatar di Franco_0412
    Franco_0412 non è in linea Novello
    Post
    4
    Ciao AntonioG,
    la variabile che mi dici di mettere fuori dal ciclo (e su questo sono perfettamente d'accordo con te) è objAVDoc, a questo punto però anche "Set objAVDoc = Nothing" deve andare fuori dal ciclo, altrimenti va in errore lo script.

    Comunque ho provato ad inserire dentro al ciclo il nothing dell'altra variabile (objPDDoc)ma non cambia nulla, solito errore di memoria.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi