IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Html vers pdf


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Points : 25
    Points
    25
    Par défaut Html vers pdf
    Bonjour,
    Je suis occupé à convertir du html vers du pdf. Je ne dois plus être très loin de la solution mais je bloque.
    je suis parti sur une lib du nom de synPDF avec Thtmlviewer pour la partie html.

    J'ai déjà laissé un message sur le forum de synPdf mais il reste sans réponse.

    Un exe est disponible sur cette page datant de 2010, il fonctionne bien.
    Le code source devrait être sur le repository mais je ne le trouve plus.
    J'ai fini par trouvé le code sur cette page mais je n'arrive pas à le faire fonctionner.

    J'en suis arrivé à soit il me renvoie une erreur d'exécution soit il ne fait rien avec le code ci-dessous.
    C'est la partie html qui bloque, sinon j'arrive à créer un pdf si je rajoute le texte 'This is some text.'
    Aurriez-vous déjà utiliser cette lib ?

    je suis sous delphi rio.

    Merci et bonne journée
    Bertrand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    procedure TForm1.btn_tpdfDocumentClick(Sender: TObject);
    var
      filename: string;
     
      // lPdf: TPdfDocument;
      lPdf: THtml2Pdf;
      lPage: TPdfPage;
     
      // html
      Fenetre: TForm;
      html: TStringList;
    begin
      filename := 'D:\Delphi\pdf\synPdf\export\tpdfDocument.pdf';
     
      Fenetre := TForm.Create(nil);
      HTMLViewer := THTMLViewer.Create(Fenetre);
      Fenetre.InsertControl(HTMLViewer);
     
      html := TStringList.Create;
      html.LoadFromFile('D:\Delphi\pdf\synPdf\html\Doc_absence.print.html', TEncoding.UTF8);
      HTMLViewer.LoadFromString(html.Text);
     
      // lPdf := TPdfDocument.Create;
      lPdf := THtml2Pdf.Create;
      try
        lPdf.Info.Author := 'Tester';
        lPdf.Info.CreationDate := Now;
        lPdf.Info.Creator := 'Tester';
        lPdf.DefaultPaperSize := psA4;
        lPage := lPdf.AddPage;
     
        lPdf.Canvas.SetFont('Helvetica', 10.0, []);
        lPdf.Canvas.SetLeading(lPdf.Canvas.Page.FontSize);
        lPdf.Canvas.SetLineWidth(0.1);
     
        // lPdf.Canvas.BeginText;
        // lPdf.Canvas.TextOut(300, 700, 'This is some text.');
        // lPdf.Canvas.EndText;
     
        lPdf.MarginLeft := 1;
        lPdf.MarginTop := 1;
        lPdf.MarginRight := 1;
        lPdf.MarginBottom := 1;
        lPdf.ScaleToFit := True;
     
        lPdf.Viewer := HTMLViewer;
        lPdf.Execute;
     
        lPdf.SaveToFile(filename);
      finally
        lPdf.Free;
      end;
     
      HTMLViewer.Free;
      Fenetre.Free;
     
      ShellExecute(Handle, 'open', PChar(filename), '', '', SW_NORMAL);
    end;

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Points : 25
    Points
    25
    Par défaut
    Suite des événements,

    J'ai regardé dans le code html2pdf.pas
    La ligne -> LPage.SaveToFile('D:\Delphi\pdf\synPdf\export\'+'Page'+IntToStr(LI+1)+'.emf');
    Me crée un fichier emf avec le contenu de mon fichier html.
    Et finalement lPdf.SaveToFile(filename); me crée un beau fichier pdf avec un carré grisé. Je suppose que c'est la place du fichier emf.
    Donc il me reste à comprendre comment passer le contenu du fichier emf vers le pdf.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    procedure THtml2Pdf.Execute;
    var
      LFormatWidth, LWidth, LHeight, LI: Integer;
      LPages: TList;
      LPage: TMetafile;
      LScale: Single;
      LMarginX, LMarginY, LPointsWidth,  LPointsHeight, LMarginBottom: Single;
      PageText: string;
    begin
      //ForceJPEGCompression := 80;
      LPointsWidth := DefaultPageWidth - Centimeters2Points(MarginLeft + MarginRight);
      LFormatWidth := Points2Pixels(LPointsWidth);
      LWidth := Viewer.FullDisplaySize(LFormatWidth).cx;
      if ScaleToFit and (LWidth > LFormatWidth) and (LFormatWidth > 0) then
        LScale := LFormatWidth / LWidth
      else
        LScale := 1;
      LPointsHeight := (DefaultPageHeight - Centimeters2Points(MarginTop + MarginBottom)) / LScale;
      LHeight := Points2Pixels(LPointsHeight);
      LPages := Viewer.MakePagedMetaFiles(LWidth, LHeight);
      LMarginX := Centimeters2Points(MarginLeft);
      LMarginY := -Centimeters2Points(MarginTop);
      LMarginBottom := Centimeters2Points(MarginBottom);
      for LI := 0 to LPages.Count - 1 do
      begin
        AddPage;
        LPage := TMetafile(LPages[LI]);
        with Canvas do begin
          GSave;
          Rectangle(LMarginX,LMarginBottom,LPointsWidth,LPointsHeight);
          Clip; // THtmlView may print out of the margins ;)
          RenderMetaFile(LPage, LScale, LMarginX, LMarginY);
          GRestore;
          if DrawPageNumber then begin
            if DrawPageNumberText='' then
              PageText := 'Page %d/%d' else
              PageText := DrawPageNumberText;
            PageText := Format(PageText,[LI+1,LPages.Count]);
            SetFont('Arial',9,[]);
            SetRGBStrokeColor(clBlack);
            TextOut(LMarginX+(LPointsWidth-TextWidth(PDFString(PageText)))/2,
              LMarginBottom-9, PDFString(PageText));
          end;
        end;
        LPage.SaveToFile('D:\Delphi\pdf\synPdf\export\'+'Page'+IntToStr(LI+1)+'.emf');
        FreeAndNil(LPage);
      end;
      FreeAndNil(LPages);
    end;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Points : 25
    Points
    25
    Par défaut
    Re-bonjour,

    Et bien j'ai trouvé une solution à mon problème de pdf.
    L'option pour définir des marges dans le pdf ne fonctionne pas. Quand je laisse 0 comme paramètres le pdf est généré correctement.
    Voici le code pour ceux qui voudrait essayer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    procedure TForm1.btn_tpdfDocumentClick(Sender: TObject);
    var
      filename: string;
     
      // lPdf: TPdfDocument;
      lPdf: THtml2Pdf;
      lPage: TPdfPage;
     
      // html
      Fenetre: TForm;
      html: TStringList;
    begin
      filename := 'D:\Delphi\pdf\synPdf\export\tpdfDocument.pdf';
     
      //does not create htmlViewer in demo, error i think
      Fenetre := TForm.Create(nil);
      HTMLViewer := THTMLViewer.Create(Fenetre);
      Fenetre.InsertControl(HTMLViewer);
     
      html := TStringList.Create;
      html.LoadFromFile('D:\Delphi\pdf\synPdf\html\Doc_absence.print.html', TEncoding.UTF8);
      HTMLViewer.LoadFromString(html.Text);
      //only margin for print mode
      {HTMLViewer.PrintMarginLeft := 0;
      HTMLViewer.PrintMarginRight := 0;
      HTMLViewer.PrintMarginTop := 10;
      HTMLViewer.PrintMarginBottom := 0;
      //HTMLViewer.print(1, 1);} // print html
     
      // lPdf := TPdfDocument.Create;
      lPdf := THtml2Pdf.Create;
      try
        lPdf.Info.Author := 'Tester';
        lPdf.Info.CreationDate := Now;
        lPdf.Info.Creator := 'Tester';
        lPdf.Orientation := TPrinterOrientation.poPortrait;
        //lPdf.DefaultPaperSize := TPDFPaperSize.psA4;
        lPdf.DefaultPaperSize := psA4;
     
        //needed with canvas
    //    lPage := lPdf.AddPage; //not needed with html2pdf
    //    lPdf.Canvas.SetFont('Helvetica', 10.0, []);
    //    lPdf.Canvas.SetLeading(lPdf.Canvas.Page.FontSize);
    //    lPdf.Canvas.SetLineWidth(0.1);
    //    lPdf.Canvas.BeginText;
    //    lPdf.Canvas.TextOut(300, 700, 'This is some text.');
    //    lPdf.Canvas.EndText;
     
        lPdf.MarginLeft := 0;
        lPdf.MarginTop := 0;
        lPdf.MarginRight := 0;
        lPdf.MarginBottom := 0;
        lPdf.ScaleToFit := false;
        lPdf.DrawPageNumber := True;
        //lPdf.SetOrientation :=
     
        //to use the htmlviewer
        lPdf.Viewer := HTMLViewer;
        lPdf.Execute;
     
        lPdf.SaveToFile(filename);
      finally
        lPdf.Free;
      end;
     
      HTMLViewer.Free;
      Fenetre.Free;
     
      ShellExecute(Handle, 'open', PChar(filename), '', '', SW_NORMAL);
    end;
    Pour le reste le code procedure THtml2Pdf.Execute; reste valide

    Bonne journée

    Bertrand

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Edition Html vers PDF
    Par Diablo_22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 14/12/2007, 10h43
  2. [FPDF] Tableaux HTML vers PDF
    Par brida dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/10/2007, 21h06
  3. [FPDF] Convertion HTML vers PDF
    Par sami_c dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 21/09/2007, 16h43
  4. Convertion HTML vers pdf problème
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/07/2007, 17h25
  5. HTML vers PDF
    Par Warzak dans le forum Langage
    Réponses: 2
    Dernier message: 08/08/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo