Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB6] Compilare un file PDF con codice HTML

    Per creare un file PDF solitamente utilizzo PDF Creator. Dapprima memorizzo la stampante di default, poi setto PDF Creator come stampante attuale e quindi, con delle istruzioni tipo
    codice:
       Printer.FontSize = 18
       Printer.CurrentY = 20
       Printer.CurrentX = 28
       Printer.Print "TESTO DI PROVA"
       Printer.EndDoc
    sono in grado di creare un file PDF. Alla fine della fiera non devo però dimenticarmi di settare nuovamente la stampante di default come stampante attuale.
    Tutto funziona a meraviglia; uso questo sistema da svariati anni.
    Adesso però sono nelle curve. Al posto di
    Printer.Print "TESTO DI PROVA"
    dovrei scrivere
    Printer.Print CodiceHTML$ o qualcosa del genere.
    CodiceHTML$ è una variabile stringa che contiene appunto del codice html. Ad esempio
    codice:
    CodiceHTML$ = "<html><body><table><tr><td><b>GRASSETTO</b></td></tr></table></body></html>"
    Ovviamente nel file PDF la parola GRASSETTO dovrebbe apparire appunto in grassetto e gli ulteriori tag nel codice html dovrebbero rispettare la sintassi di questo linguaggio di scripting (o per lo meno i tag principali).
    C'è qualche modo per riuscire ad ottenere quanto sopra descritto ?
    Grazie per l'attenzione.

  2. #2
    procurati una tabella di trascodifica tag html --> tag pdf e vai di replace o regex; ci saranno anche mille tag da togliere (tipo < html > < body > etc)

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,774
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    C'è qualche modo per riuscire ad ottenere quanto sopra descritto ?
    Quello di cui hai bisogno è di un "renderer" di file HTML nel formato PDF, ossia di una libreria/componente che sia in grado di capire l'HTML e produrne l'output grafico, utilizzandolo poi per la generazione del PDF corrispondente.

    Il lavoro non è triviale e molti dei componenti che fanno questo sono appunto commerciali.

    Quello che potresti cercare è un wrapper o un interfacciamento a WKHtmlToPdf, un tool configurabile che si occupa appunto di questo lavoro; ad esempio, potresti invocare il tool passando i parametri necessari, ovvero scrivendo l'HTML in un file esterno e richiedendo la conversione (rendering) in PDF.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  4. #4
    @optime
    Quanto suggerito non mi pare attuabile.
    Ad esempio
    <td align=center>CENTRO</td><td>ALTRO</td>
    In questi 2 casi quando valgono X1 e X2 ?
    Printer.CurrentX=X1 : Printer.Print "CENTRO"
    Printer.CurrentX=X2 : Printer.Print "ALTRO"
    Non mi sembra che utilizzando semplicemente una serie di Replace si riesca a ottenere il risultato voluto.

    @alka
    Il suggerimento, a prima vista assai valido, merita un corposo approfondimento. Non è cosa da 5 minuti.

    Esaminerò anche la possibilità di utilizzare un WebView.

  5. #5
    avevo capito che dovevi compilare un PDF (cioè riempirne i campi) con un input che arriva con dentro anche dei tag HTML e li dovessi semplicemente strippare.

    Se invece devi generare un PDF da una pagina HTML, non capisco perché reinventare l'acqua calda e non affidarsi a servizi già esistenti.

    Se invece non è neanche questo ciò che devi fare, allora non ho capito niente e mi rintano nel mio angolino

  6. #6
    Devo creare, generare un file PDF da una stringa che contiene codice HTML o, è lo stesso, devo creare, generare un file PDF da una pagina HTML la quale contiene i contenuti (!) della stringa sopra citata.
    Il titolo ("Compilare un file PDF ..." è un po' fuorviante, lo ammetto. Avrei forse dovuto scrivere "Creare un file PDF ....
    La sub seguente stampa, ma solo su carta, un file HTML. NJon ho trovato modo, neanche con il trucchetto di cambiare la stampante, di creare un file PDF.
    Private Sub PrintHtmlFile(cHtmlFile As String)
    Dim hProcess As Long
    Dim ProcessId As Long
    Dim ExitCode As Long
    Dim cWinSysDir As String
    cWinSysDir = String(254, " ")
    Call GetSystemDirectory(cWinSysDir, Len(cWinSysDir))
    cWinSysDir = Trim(Left(cWinSysDir, InStr(cWinSysDir, Chr(0)) - 1))
    If Dir(cWinSysDir & "\MSHTML.DLL") <> "" Then
    ProcessId = Shell("rundll32.exe " & cWinSysDir & "\MSHTML.DLL,PrintHTML " & Chr(34) & cHtmlFile & Chr(34), vbNormalFocus)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
    Do
    Call GetExitCodeProcess(hProcess, ExitCode)
    DoEvents
    Loop While ExitCode = STATUS_PENDING
    Call CloseHandle(hProcess)
    End If
    End Sub
    Ultima modifica di giustavalla; 07-09-2020 a 20:01

  7. #7
    Alla fine ho utilizzato Word
    codice:
    ObjDoc.SaveAs (CartellaModuli & "\" & NomeFile), wdFormatPDF

  8. #8

  9. #9
    Riprendo, a distanza di tempo, questo post per chiedere se c'è un'altra soluzione al mio problema in quanto il processo è un po' lento (una decina di secondi). Si può fare in altro modo, più veloce ?
    Ecco comunque il codice da me utilizzato :
    codice:
       '--- ora lo salvo come pdf
       Dim ObjWord            As word.Application
       Dim ObjDoc              As New word.Document
       Set ObjWord = New word.Application
       With ObjDoc.PageSetup
          .PaperSize = wdPaperA4
          .Orientation = wdOrientPortrait
       End With
       Set ObjDoc = ObjWord.Documents.Add(App.Path & "\tempmodulo.htm")
       ObjDoc.SaveAs (NomeFile), wdFormatPDF
       ObjWord.Visible = False
       On Error Resume Next
       ObjWord.Quit 0 
       Set ObjWord = Nothing
       On Error GoTo 0

  10. #10
    da quello che ricordo, il grosso del tempo viene assorbito dal caricamento della parte word, più che dall'operazione di creazione del PDF in sé. Dovresti usare delle librerie ad-hoc per i PDF.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.