Newsgroup: it.comp.lang.visual-basic
Titolo: [Al limite dell'OT] HTML->Word

Ho scritto un programma che ha come output un file HTML. Si tratta del testo
di una canzone con gli accordi ben allineati sulle parole. Quando però cerco
di importarlo in Word perdo la spaziatura del paragrafi, e quel che è
peggio, l'allineamento degli accordi, che vengono spostati verso destra.
Avete qualche idea?
Per importarlo in Word uso il seguente codice:
Dim w As Word.Application
Dim d As Word.Document
Set w = New Word.Application
Set d = w.Documents.Open(AppPath + "Libro.html")
w.Visible = True
w.ActiveWindow.View.Type = wdPrintView
d.SaveAs AppPath + "Libro.doc", Word.wdFormatDocument
Set d = Nothing
Set w = Nothing
Mentre questo è un esempio di output HMTL:
<html>
<head>
<meta http-equiv="Content-Language" content="it">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="NACConverter">
<title>Alabaré</title>
<style>
<!--
.AccordiTesto { font-size: 11 pt; font-family: Tahoma; font-weight: bold;
text-align: left; line-height: 100%; margin-top: 11; margin-bottom: 0;  }
.AccordiRitornello { font-size: 11 pt; font-family: Tahoma; font-weight:
bold; text-align: left; line-height: 100%; margin-top: 11; margin-bottom:
;  }
.Testo { font-size: 12 pt; font-family: Tahoma; text-align: left;
line-height: 100%; margin-top: 3; margin-bottom: 0;  }
.Ritornello { font-size: 12 pt; font-family: Tahoma; font-weight: bold;
text-align: left; line-height: 100%; margin-top: 3; margin-bottom: 0;
text-transform: uppercase;  }
.Momento { font-size: 10 pt; font-family: Tahoma; text-align: left;
line-height: 100%; margin-top: 0; margin-bottom: 0;  }
.Titolo { font-size: 15 pt; font-family: Tahoma; font-variant: small-caps;
line-height: 100%; border-top-style: solid; border-top-width: 1;
border-bottom-style: solid; border-bottom-width: 1; margin-top: 6;
margin-bottom: 6 }
-->
</style>
</head>
<body>
<p class="Titolo">Alabaré (1)</p>
<p class="Testo">&nbsp;</p>
<p
class="AccordiTesto">Re&nbsp;&nbsp;&nbsp;Si&nbsp;&nbsp;&nbsp;Sol&nbsp;&nbsp;
&nbsp;La</p>
<p class="Testo">&nbsp;</p>
<p
class="AccordiRitornello">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Re&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Si</p>
<p
class="Ritornello">Alabaré&nbsp;(alabaré),&nbsp;alabaré&nbsp;(alabaré),</p>
<p
class="AccordiRitornello">&nbsp;&nbsp;&nbsp;Sol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp
;La&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Re</p>
<p
class="Ritornello">alabaré&nbsp;o&nbsp;mio&nbsp;Signor&nbsp;(2&nbsp;volte)</
p>
<p class="Testo">&nbsp;</p>
<p
class="Testo">Non&nbsp;c'è&nbsp;Dio&nbsp;grande&nbsp;come&nbsp;Te,&nbsp;no&n
bsp;non&nbsp;c'è,&nbsp;no&nbsp;non&nbsp;c'è!&nbsp;(2&nbsp;volte)</p>
<p
class="AccordiTesto">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sol&nbsp;&nbsp;&nbsp;&n
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Re&nbsp;&n
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;La&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n
bsp;&nbsp;Re</p>
<p
class="Testo">Non&nbsp;c'è&nbsp;Signore&nbsp;che&nbsp;operi&nbsp;salvezza&nb
sp;come&nbsp;opera&nbsp;Gesù!&nbsp;(2&nbsp;volte)</p>
<p class="Testo">&nbsp;</p>
</body>
</html>
Grazie,
Ignazio

 Avete qualche idea?
Di solito succede quando la larghezza dei caratteri per qualche
motivo non può essere mantenuta identica. In questo caso
penso che il problema sia sugli spazi, che tu usi per allineare
il tutto. A proposito, sei sicuro che il font non venga sostituito,
e che l'impostazione di default del paragrafo sia come ti serve ?
Prova in word, a sostituire un determinato numero di spazi
con delle tabulazioni, cercando di trovare l'equivalenza corretta
necessaria a riallineare tutto, ma tieni presente che basterebbe
cambiare carattere per sbarellare di nuovo tutto. Forse (la sparo)
dovresti usare un template di word con delle tabulazioni e inserire
i dati in quello.
Ma mi viene in mente una cosa: se l'ottica del tuo programma
lo permette, perché non fai direttamente una esportazione in
RTF, usando una RichTextBox ? Dopo la puoi anche aprire in
Word, se necessario, con un'affidabilità nella conversione
sicuramente molto migliore della conversione da html a .doc
ed è molto facile da automatizzare, basta scriversi un paio di
sub per il cambio di stile.
Un esempietto a cavolo:
'************************
RTB1.Text = ""
Dim DT As String ' due tab
DT = vbTab & vbTab
With RTB1
     ' setta testo note
    .SelFontName = "Tahoma"
    .SelFontSize = "10"
    .SelBold = True
    ' scrivi note (inventate :-) non provate a suonarle :-) )
    .SelText = "La" & DT & "Re" & DT & "Do" & DT & "Sol" & vbCrLf
    ' setta testo strofe
    .SelFontName = "Abadi MT Condensed"
    .SelFontSize = "8"
    .SelBold = False
    ' scrivi strofa
    .SelText = "Questa è la" & DT & "storia di u-" & DT & "no di" & DT & "noi"
    End With
'************************
Se ti serve/interessa e non ce l'hai già, ritiro fuori il codice per
gestire le tabulazioni in una RTB.
Bye, G.

 RTF, usando una RichTextBox ?
Ho fatto di più: scrivo direttamente su un documento Word. Il risultato è lo
stesso dell'importazione dell'HTML (a parte il fatto che lo stile del
paragrafo non viene modificato, ovviamente). Ho cercato di modificare
crenatura, spaziatura, proporzioni... niente: lo spazio viene trattato in
maniera indipendente dal resto del carattere. Ma ho notato una cosa:
salvando il documento (sia in RTF che in DOC) e aprendolo in WordPad,
l'allineamento funziona alla perfezione. Quindi la causa del problema va
ricercato nelle impostazioni avanzate di Word.
Mi sono ricordato di una cosa che avevo seppellito nel mio inconscio: le
impostazioni di compatibilità del documento. Dopo qualche prova ho trovato:
d.Compatibility(wdUsePrinterMetrics) = True
Ok, funziona molto meglio, ma non è perfetto: continuano ad esserci problemi
con il testo tutto maiuscolo, che è molto più "ristretto" di quello che
dovrebbe essere (o almeno di quello di WordPad, di Internet Explorer e di
quello considerato da TextWidth). Aiutooo!!!
Grazie mille per i suggerimenti.
Ignazio

 quello considerato da TextWidth). Aiutooo!!!
Qualcuno ha qualche suggerimento su come impostare una ricerca in MSDN,
Google, ecc.? :-)
Ignazio

 quello considerato da TextWidth).
Per "ristretto" intendi:
1) la dimensione di ogni singolo carattere
2) le proporzioni di ogni singolo carattere
3) la spaziatura fra i caratteri di una parola
4) quella fra parole ?
Domanda di importanza secondaria, forse... e forse no.
A quale scopo esporti in Word ?
Bye, G.

 A quale scopo esporti in Word ?
Impaginazione e stampa.
Andrebbe bene anche una funzione, magari esportata da Word, che mi calcoli
la larghezza del testo usando i criteri di Word...
Grazie
Ignazio

 la larghezza del testo usando i criteri di Word..
Capisco quello che intendi, ma su questo non so aiutarti :-(
bisognerebbe vedere se esporta qualcosa tipo .TextWidth o
.StringWidth. Prova a frugare sull'help di Word...
Bye, G.

 .StringWidth. Prova a frugare sull'help di Word...
Nulla!
Grazie mille per il supporto...
Ignazio

 disattivandolo questi kerning non vengano "creati".
Perché gli avevi detto, prima, di usare le info dalla stampante,forse.
Ricordi quel "d.Compatibility(wdUsePrinterMetrics) = True" ?
Bye, G.

 Ricordi quel "d.Compatibility(wdUsePrinterMetrics) = True" ?
Certo, ma se non glielo dico fa anche di peggio!!! Comunque forse col
servizio disattivato non trova le informazioni che cerca e non apporta
nessuna modifica... Sto indagando... :-)
Grazie