Condividi:        

Come trasformare un .jpg in un file .pdf

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Come trasformare un .jpg in un file .pdf

Postdi kiuba » 30/11/20 21:46

Ciao,
ho costruito una macro che esegue degli screenshot di alcune celle di un foglio exce (versione 2010) e le salva in una directory in formato .jpg, successivamente apre outlook e invia delle mail con le immagini allegate. Devo gestire circa 900 mail alla volta e allegare la corretta immagine ad ogni destinatario. Fin qui funziona tutto molto bene. Vorrei ora completare la macro facendo in modo che crei una copia dei file .jpg, la converta in .pdf e la alleghi alla mail assieme al .jpg. Il risultato finale deve essere quindi l'invio delle mail con il doppio allegato. Non saprei come procedere per creare la copia in .pdf. Spero che qualcuno possa aiutarmi.

I file .jpg vengono salvati in una directory C:\Nutrizione\ con il nome n_Nutrizione.jpg, dove n è un indice che varia per ogni immagine,
vorrei che venisse creato anche il file n_Nutrizione.pdf nella stessa directory e che venisse allegato nella mail assieme all'altro file.

Ringrazio anticipatamente chiunque saprà aiutarmi.
kiuba
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Sponsor
 

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 30/11/20 22:19

Aggiungo per maggior chiarezza la macro che utilizzo, semplificata ad un ciclo formato da soli tre passaggi, al posto delle centinaia alla quale andrà effettivamente sottoposta.


Sub mail()
'
MySheet = "Foglio1" '<<< Il foglio da "fotografare"
MyArea = "B2:H26" '<<< La tua area da fotografare
'
For i = 1 To 3
Range(Sheets("Foglio1").Cells(12, i + 6), Sheets("Foglio1").Cells(13, i + 6)).Copy
Range(Sheets("Foglio1").Cells(4, 5), Sheets("Foglio1").Cells(5, 5)).PasteSpecial Paste:=xlPasteFormulas
Nominat = Sheets("Foglio1").Cells(i, 11).Value '<<< La cella dove si trova il nominativo "corrente"
'
Sheets(MySheet).Activate
Range(MyArea).Select
GifLargh = Selection.Width + 10 '<<<AGGIUNTA
GifAlt = Selection.Height + 10 '<<<AGGIUNTA
Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Sheets("Scratch").Select
Dim ch As ChartObject
Set ch = Sheets("Scratch").ChartObjects.Add(1, 1, GifLargh, GifAlt)
Sheets("Scratch").ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.Paste
OutFile = "C:\Nutrizione\" & Nominat & "_Nutrizione.jpg"
Worksheets("Scratch").ChartObjects(1) _
.Chart.Export _
Filename:=OutFile, FilterName:="JPEG"

ActiveSheet.ChartObjects(1).Delete
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
'
' (a)
Set OutApp = CreateObject("Outlook.Application")
'
'compilazione di un testo standard di accompagnamento
BDT = "Ti invio il risultato delle prove effettuate."
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "kiuba"
'
' (b)
EmailAddr = Sheets("Foglio1").Cells(3 + i, 2).Value
Subj = "Invio risultati questionario"
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = BDT
.Attachments.Add OutFile '<<< VEDI TESTO
.Display 'or use .send
.send
End With
'
' (c)
Set OutMail = Nothing
'
' (d)
Set OutApp = Nothing
'
Application.Wait (Now + TimeValue("0:00:04"))
Application.SendKeys "%a"
Application.Wait (Now + TimeValue("0:00:04"))

Next i
End Sub
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi Anthony47 » 01/12/20 00:24

Intanto "Benvenuto nel forum"
Codice: Seleziona tutto
GifLargh = Selection.Width + 10 '<<<AGGIUNTA
GifAlt = Selection.Height + 10 '<<<AGGIUNTA
Sono contento di vedere un codice pubblicato quasi 12anni fa ancora utilizzato, con gli stessi commenti...

Quanto al salvataggio come pdf, potresti aggiungere questo blocco di codice in questa posizione:
Codice: Seleziona tutto
'...
Sheets(MySheet).Activate
Range(MyArea).Select
'
'Blocco per salvare come Pdf:
OutFileb = "C:\Nutrizione\" & Nominat & "_Nutrizione.pdf"
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=OutFileb, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'
GifLargh = Selection.Width + 10 '<<<AGGIUNTA
GifAlt = Selection.Height + 10 '<<<AGGIUNTA
'continua...

Nota che in questo modo crei il pdf dal range di partenza, lo stesso da cui subito dopo vai a creare il jpg

Per allegarlo, aggiungerai ovviamente (linea marcata <<< questa!):
Codice: Seleziona tutto
.Attachments.Add OutFile '<<< VEDI TESTO
.Attachments.Add OutFileb      '<<<<<<<< questa!
.Display 'or use .send


Ma che versione di Outlook usi? Comunque, visto che parli di inviare "parecchie" mail alla volta, puoi ridurre quelle attese in coda a 1 e 2 secondi, rispettivamente

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 01/12/20 08:20

Bingo al primo colpo! Grazie, funziona perfettamente!

Naturalmente hai visto giusto, ho costruito la macro prendendo spunto da varie discussioni passate del forum. Considera che fino a sabato non avevo mai costruito macro.. Per quanto mi riguarda il forum è un capolavoro! Complimenti.

Uso Outlook per microsoft 365 a 32 bit.

Se posso rubarti ancora un po' di tempo ne approfitterei per chiederti come fare a inserire l'immagine ottenuta nella macro direttamente nel corpo della mail, invece che come allegato.

Grazie ancora!
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi Anthony47 » 01/12/20 15:17

Per immagine "in linea col testo" devi usare il formato html, e inglobare nel testo la descrizione dell'immagine tramite il descrittore "cid:=".
Vedi come fece un altro utente qui:
viewtopic.php?f=26&t=111189
Mi pare che la sua situazione sia abbastanza simile alla tua, magari puo' trarre utili spunti.

Il codice di quella discussione include sia l'inserimento della immagine in linea tramite il descrittore "cid", sia l'uso della Function RangePublish, che converte il testo + formato di un intervallo Excel in formato html direttamente concatenabile con il testo base della email.

Per velocizzare il tuo codice, dovresti portare fuori dal ciclo For i /Next i le istruzioni Set OutApp = CreateObject("Outlook.Application") (prima del ciclo) e Set OutApp = Nothing (dopo il ciclo).

Avendo Outlook 365, invece di ".Display" puoi utilizzare direttamente ".Send", che ti consente di eliminare le due righe Application.Wait (Now + TimeValue("0:00:04")) e Application.SendKeys "%a" e di trasformare senza problemi l'unica attesa in Now + TimeValue("0:00:01")

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 02/12/20 15:17

Ho provato a lavorare sul codice della discussione:
viewtopic.php?f=26&t=111189
mi sembra molto interessante, però ho notato che le immagini ottenute aprendo la mail inviata da outlook, piuttosto che dal server di postra di yahoo, non coincidono.

Ho impostato il range dell'area da fotografare così:
MakeJPG = CopyRangeToJPG("Foglio1", "A1: L21" & cSec + 5, CStr(cSec))

Su Outlook l'immagine è sfasata rispetto all'intervallo indicato (appare l'intervallo A22:L55) , mentre su yahoo produce un'immagine corretta solo per quanto riguarda le colonne, prolungando l'immagine fino alla all'ultima riga del foglio excel, l'area cercata risulta, di conseguenza, quasi invisibile. Oltretutto su yahoo l'immagine microscopica è visibile solo aprendo l'allegato, nel testo della mail compare una cornice vuota.
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 02/12/20 15:24

Vorrei però chiederti come fare ad inserire immagini " in linea col testo" già presenti nel PC, ad esempio il logo dell'azienda.

Vorrei quindi inserire l'immagine logo.jpg presente nella directory: C:\Nutrizione\ nel testo della mail in una posizione qualsiasi a mia scelta.
Ti ringrazio per la disponibilità.

P.s. non ho ancora provato a lavorare con Function RangePublish, lo farò non appena avrò compreso come lavorare con le immagini e poi ti farò sapere.
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi Anthony47 » 02/12/20 23:52

Se vuoi poter inviare immagini in linea col testo allora devi passare dal formato "testo puro" al formato "html"
Se non conosci cosa sia l'html sappi che si tratta del formalismo con cui si descrivono le pagine web; per dettagli vedi https://www.html.it/guide/guida-html/

Il "testo puro" si inserisce nel corpo di una email com .Body = "Stringhe di testo"; il testo in formato html si inserisce con .HTMLBody = "Stringhe in formato html"

Quindi vediamo come diventa una macro che puo' inviare una mail formattata html:
Codice: Seleziona tutto
Sub BaseMail()
Dim BDT As String, I As Long
'
Set OutApp = CreateObject("Outlook.Application")
'
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<i>kiuba &amp; kiss</i>"
'
' (b)
For I = 1 To 3
    EmailAddr = Sheets("Foglio1").Cells(3 + I, 2).Value
    Subj = "Invio risultati questionario"
    '
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .to = EmailAddr
        .CC = ""
        .BCC = ""
        .Subject = Subj
        .htmlBody = BDT
        '.Attachments.Add OutFile
        .Display 'or use .send     'VEDI TESTO 1
        '.send                     'VEDI TESTO 2
    End With
    '
    Application.Wait (Now + TimeValue("0:00:01"))
    Set OutMail = Nothing
Next I
Set OutApp = Nothing
End Sub

Le due righe marcate VEDI TESTO 1/2 sono alternative:
.Display visualizza una mail pronta per essere modificata, cancellata, spedita, etc
.Send invece procede all'invio diretto della mail
Ho usato .Display perche' volevo vedere come appariva la mail in partenza

Noterai inoltre che ho usato i tag per inserire un testo in bold e un altro in italico; si tratta solo di esempi, puoi comporre il testo come preferisci (ovviamente rispettando il formalismo html)


Se vuoi inserire una immagine "in linea" con il testo, allora dovrai allegare l'immagine e inoltre inserire il descrittore "cid" all'interno del testo html. Ad esempio:
Codice: Seleziona tutto
Sub BaseImmagineInLinea()
Dim BDT As String, I As Long, OutAPP As Object
Dim InLineImg As String, PicName As String
'
Set OutAPP = CreateObject("Outlook.Application")
'
InLineImg = "D:\DImmagini\usptrick_sic.jpg"        '<<< Full Path & Name
'
PicName = Mid(InLineImg, InStrRev(InLineImg, "\", , vbTextCompare) + 1)
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<p></p><img src=""cid:" & PicName & """ width=200 height=150><br>"
BDT = BDT & "<p><i>kiuba &amp; kiss</i></p>"
'
For I = 1 To 3
    EmailAddr = Sheets("Foglio1").Cells(3 + I, 2).Value
    Subj = "Invio risultati questionario "
    '
    Set OutMail = OutAPP.CreateItem(0)
    With OutMail
        .to = EmailAddr
        .CC = ""
        .BCC = ""
        .Subject = Subj
        .htmlBody = BDT
        .Attachments.Add InLineImg
'        .Display 'or use .send
        .send
    End With
    '
    Application.Wait (Now + TimeValue("0:00:01"))
    Set OutMail = Nothing
Next I
Set OutAPP = Nothing
End Sub


Non farai fatica a rilevare come il descrittore sia stato posizionato subito prima della ipotetica firma, dove quindi l'immagine sara' (dovrebbe essere, eh he) visualizzata

Nota che per allegare il file immagine devi usare il percorso + nome file; il descrittore cid richiede solo l'uso del nome file. Pertanto nella macro ho previsto una riga in cui ho inserito il percorso + nome file (vedi riga InLineImg = "D:\DImmagini\usptrick_sic.jpg") e successivamente mi calcolo il solo nome file (vedi riga PicName = Mid(InLineImg etc etc)

I codici suddetti inviano 3 messaggi a destinatari diversi (vedi ciclo For I=1 to 3 /Next I), ma tutti uguali.
Dovrai prevedere quindi il modo per compilare messaggi diversi e magari anche allegati diversi

Segnalo infine questa variante, applicabile sia alla Sub BaseMail che alla Sub BaseImmagineInLinea:
Codice: Seleziona tutto
'...
'compilazione di un testo standard di accompagnamento
BDT = "<b>Buongiorno</b><br>Ti invio il risultato delle prove effettuate.<br>"
BDT = BDT & "Cordiali saluti <br>"
BDT = BDT & "<p></p><img src=""cid:" & PicName & """ width=200 height=150><br>"
BDT = BDT & "<p><i>kiuba &amp; kiss</i></p>"
BDT = BDT & RangePublish("Template", "B10:D20")
'
'...

Questa, in coda all'ipotetica firma, inserisce anche il contenuto del range B10:D20 del foglio Template, direttamente come testo mail, usando la funzione RangePublish di cui ti ho gia' parlato.


Note finali:
A) non tutti i client di posta visualizzeranno allo stesso modo; Outlook mostra in linea, Thunderbird no, la webmail di Libero.it mostra in linea. Insomma non escludo qualche sorpresa ma per questo bisogna prendersela con i relativi progettisti.

B) se si tratta di una stessa immagine da inserire sempre in fondo all'email, allora non ignorerei l'ipotesi di usare una "firma" e mettere lì l'immagine una volta per sempre

Spero che trovi spunti utili...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 03/12/20 16:01

Grazie, tutto molto chiaro e ricco di spunti.

A questo punto però mi sono ingolosito.. esiste funzione per inserire un grafico realizzato con excel in linea con il testo? Oppure devo creare l'immagine del grafico e poi inserirlo come immagine?

P.s. non ho ancora capito perchè l'immagine allegata venga diversa se aperta con outlook o con yahoo. Mi sembra un bel mistero che un allegato cambi forma in funzione del server
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi gimart » 12/12/20 11:35

Ma non usi Photoshop? Se lo usi, la procedura è semplice: apri il file in Photoshop, scegli "Salva con nome" e quindi il formato pdf
gimart
Win 10 and Office 2010
Avatar utente
gimart
Utente Senior
 
Post: 1055
Iscritto il: 21/02/10 12:09

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 12/12/20 13:53

gimart ha scritto:Ma non usi Photoshop? Se lo usi, la procedura è semplice: apri il file in Photoshop, scegli "Salva con nome" e quindi il formato pdf

Grazie per il suggerimento.
Purtroppo non è quello di cui ho bisogno. Sto cercando di salvare in automatico centinaia di immagini e allegarle alla mail corrispondente senza dover fare il lavoro a mano.
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24

Re: Come trasformare un .jpg in un file .pdf

Postdi gimart » 12/12/20 14:27

kiuba ha scritto:
gimart ha scritto:Ma non usi Photoshop? Se lo usi, la procedura è semplice: apri il file in Photoshop, scegli "Salva con nome" e quindi il formato pdf
Grazie per il suggerimento.
Purtroppo non è quello di cui ho bisogno. Sto cercando di salvare in automatico centinaia di immagini e allegarle alla mail corrispondente senza dover fare il lavoro a mano.

Caspita, davvero un grosso lavoro. Spero che qualcuno sul nostro Forum ti dia un buon auto
gimart
Win 10 and Office 2010
Avatar utente
gimart
Utente Senior
 
Post: 1055
Iscritto il: 21/02/10 12:09

Re: Come trasformare un .jpg in un file .pdf

Postdi Anthony47 » 12/12/20 18:35

Per quanto riguarda la creazione dei pdf spero che la cosa sia gia' risolta...

kiuba ha scritto:esiste funzione per inserire un grafico realizzato con excel in linea con il testo? Oppure devo creare l'immagine del grafico e poi inserirlo come immagine?
Mi era sfuggita questa richiesta...
La risposta è "devi prima creare l'immagine del grafico"
Che poi e' quello che gia' fai con la tua macro:
a) crei un grafico di comodo vuoto
b) ci incolli una immagine di sfondo
c) esporti il grafico come immagine

Se il grafico esiste gia' ti limiterai alla fase c), cioe' qualcosa come
Codice: Seleziona tutto
Sheets("NomeFoglio").ChartObjects(NomeGrafico).Chart.Export Filename:=OutFile, FilterName:="JPEG"


kiuba ha scritto:non ho ancora capito perchè l'immagine allegata venga diversa se aperta con outlook o con yahoo. Mi sembra un bel mistero che un allegato cambi forma in funzione del server

L'email descrive il contenuto; come questa descrizione viene visualizzata dipende dal client di posta che usi. D'altra parte anche una pagina web spesso la vedi in un modo o nell'altro a seconda che usi Chrome o Edge o Firefox...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Come trasformare un .jpg in un file .pdf

Postdi kiuba » 12/12/20 21:09

Grazie, sono riuscito a fare tutto quello che mi serviva utilizzando i vostri consigli.
Avatar utente
kiuba
Utente Junior
 
Post: 54
Iscritto il: 30/11/20 21:24


Torna a Applicazioni Office Windows


Topic correlati a "Come trasformare un .jpg in un file .pdf":


Chi c’è in linea

Visitano il forum: Nessuno e 104 ospiti