AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism iTextSharp - Fontwechsel innerhalb Zelle
Thema durchsuchen
Ansicht
Themen-Optionen

iTextSharp - Fontwechsel innerhalb Zelle

Ein Thema von stahli · begonnen am 7. Mai 2009 · letzter Beitrag vom 24. Mai 2009
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

iTextSharp - Fontwechsel innerhalb Zelle

  Alt 7. Mai 2009, 15:25
Hi,

ich erstelle eine PdfPTable:

Delphi-Quellcode:
...
TC := new Chunk(S1 + "." + S2, Font6);
...
cell := new PdfPCell(new Phrase(TC));
...
cell.BackgroundColor := new Color(230, 230, 220)
cell.VerticalAlignment := Element.ALIGN_BOTTOM;
cell.HorizontalAlignment := Element.ALIGN_CENTER;
...
PdfTable.addCell(cell);
...
Weiß jemand, wie ich INNERHALB der Zelle einen Fontwechsel veranlassen kann? Z.B:
"kleine Schrift" dann "groß+fett" dann "gelb hinterlegt" dann "grau hinterlegt"?

Danke
Stahli
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 8. Mai 2009, 11:30
Ich habe eine Lösung gefunden

Das funktioniert über Phrasen, denen mehrere Chunks zugewiesen werden...
Das Ergebnis seht Ihr in der Anlage.

iTextSharp ist etwas gewöhnungsbedürftig aber durchaus sehr leistungsfähig
Eine deutsche Hilfe ist allerdigs kaum zu finden.

Falls es jemand mal braucht, anbei mein Quelltext dazu.


Stahli


Delphi-Quellcode:
method _Default.ButtonPdf_Click(sender: System.Object; e: System.EventArgs);
const
  Days: array [1..7] of String = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];
var
  PdfDoc: Document;
  PdfDocFileName: String;
  PdfTable{, PdfTableNested}: PdfPTable;
  NumColumns, HeaderWidth: Integer;
  X, Y, WeekNo: Integer;
  Font3: Font;
  Font6: Font;
  Font7: Font;
  Font8: Font;
  Font9: Font;
  Font10: Font;
  TC, TC1: Chunk;
  TP: Phrase;
  FirstDate: DateTime;
  ArrayDays: array [1..7, 0..53] of DateTime;
  cell: PdfPCell;
  IsOddMonth: Boolean;

  procedure PaintTable(XO: Integer);
  var
    S1, S2: String;
    gf: Boolean;
  begin
     NumColumns := 28;
     HeaderWidth := 4;
    PdfTable := new PdfPTable(NumColumns);
            
     PdfTable.WidthPercentage := 100; // percentage
            
     PdfTable.DefaultCell.HorizontalAlignment := Element.ALIGN_CENTER;

    gf := False;
    for Y := 0 to 7 do
    begin
      for X := 0 to 27 do
      begin
        if X = 0 then
        begin
          if Y = 0 then
                TC := new Chunk("Woche", Font7)
          else
                TC := new Chunk(Days[Y], Font9);
             cell := new PdfPCell(new Phrase(TC));
             cell.BackgroundColor := new Color(227, 227, 255);
          cell.VerticalAlignment := Element.ALIGN_MIDDLE;
               cell.HorizontalAlignment := Element.ALIGN_CENTER;
              PdfTable.addCell(cell);
        end
        else
        if Y = 0 then
        begin
          //Size := 8;
          if WeekNo = 0 then
                TC := new Chunk("<<<", Font8)
          else
          if WeekNo = 53 then
                TC := new Chunk(">>>", Font8)
          else
             TC := new Chunk(WeekNo.ToString + ".", Font8);
             cell := new PdfPCell(new Phrase(TC));
             cell.BackgroundColor := new Color(227, 227, 255);
          cell.VerticalAlignment := Element.ALIGN_BOTTOM;
               cell.HorizontalAlignment := Element.ALIGN_CENTER;
              PdfTable.addCell(cell);
          Inc(WeekNo);
        end
        else
        begin
          TP := new Phrase;
             cell := new PdfPCell(TP);
          S1 := ArrayDays[Y, XO + X - 1].Day.ToString;
          if Length(S1) = 1 then
            S1 := '0' + S1;
          S2 := ArrayDays[Y, XO + X - 1].Month.ToString;
          if Length(S2) = 1 then
            S2 := '0' + S2;
...
          begin
...
            begin
                  TC := new Chunk("X", Font3);
              TP.Add(TC.NewLine);
              if ((S1 <> '10') or (S2 <> '02')) then
              begin
                TC := new Chunk("gr", Font10);
                TC.setBackground(new Color(160, 160, 160));
                TP.Add(TC);
              end;
...
                   begin
                    TC := new Chunk(" ", Font7);
                TP.Add(TC);
                TC := new Chunk("ge", Font10);
                TC.setBackground(new Color(255, 255, 0));
                TP.Add(TC);
              end;
                  TC := new Chunk("X", Font3);
              TP.Add(TC.NewLine);
              gf := not gf;
            end
            else
            begin
                  TC := new Chunk(" ", Font7);
              TP.Add(TC.NewLine);
              TC := new Chunk(" ", Font10);
              TP.Add(TC.NewLine);
            end;
               if not IsOddMonth then
              cell.BackgroundColor := new Color(230, 215, 215)
            else
              cell.BackgroundColor := new Color(255, 255, 255);
          end;
          cell.VerticalAlignment := Element.ALIGN_TOP;
               cell.HorizontalAlignment := Element.ALIGN_CENTER;
              PdfTable.addCell(cell);
        end;
      end;
    end;

     PdfDoc.Add(PdfTable);

  end;

begin
  PdfDocFileName := 'E:\PdfDoc.pdf';
  PdfDoc := new Document(PageSize.A4.Rotate);

   Font3 := FontFactory.getFont(FontFactory.HELVETICA, 3, Font.NORMAL);
   Font6 := FontFactory.getFont(FontFactory.HELVETICA, 6, Font.NORMAL);
   Font7 := FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL);
   Font8 := FontFactory.getFont(FontFactory.HELVETICA, 8, Font.NORMAL);
   Font9 := FontFactory.getFont(FontFactory.HELVETICA, 9, Font.NORMAL);
   Font10 := FontFactory.getFont(FontFactory.HELVETICA, 10, Font.NORMAL);

...

  PdfWriter.getInstance(PdfDoc, new FileStream(PdfDocFileName, FileMode.Create));
  PdfDoc.Open;
  PdfDoc.Add(new Paragraph("Pdf:"));
  PdfDoc.Add(new Paragraph(" "));
 
  WeekNo := 0;
  PaintTable(0);

  PdfDoc.Add(new Paragraph(" "));

  PaintTable(27);

  PdfDoc.Close();
end;
Miniaturansicht angehängter Grafiken
pdf_737.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 19. Mai 2009, 11:38
Das Projekt und die PDF-Erstellung funktioniert jetzt schon sehr gut. Allerdings gebe ich noch einen festen Ordner auf dem Server an:

Delphi-Quellcode:
PdfDocFileName := 'd:\web\ABC\XYZ.de\PDFs\PdfDoc.pdf'; // <-- Problem 1
PdfDoc := new Document(PageSize.A4.Rotate);
 
PdfWriter.getInstance(PdfDoc, new FileStream(PdfDocFileName, FileMode.Create));
PdfDoc.Open;

// PDF definieren
 
PdfDoc.Close();
 
Response.Redirect('http:\\www.XYZ.de/PDFs/PdfDoc.pdf', True); // <-- Problem 2
Problem 1:
Local kann ich so die PDF-Erstellung nicht testen, da es diesen Ordner bei mir nicht gibt - und schön ist so eine feste Ordnerbezeichnung ja auch nicht.
Kann ich irgendwie einen Unterordner meiner aspx-Datei angeben: "[Aspx-Ordner]\PDFs\PdfDoc.pdf"?

Problem 2:
Die Anzeige der PDF-Datei im Browser sollte möglichst
- in einem neuen Register (wenn der Browser das unterstützt)
und sonst
- in einem neuen Fernster (möglicht maximiert)
erfolgen.
Wie kann man das lösen?

Stahli
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 19. Mai 2009, 11:43
1.
Nutz dazu ExtractFilePath(ParamStr(0)) und dann deine weitere Unterordner-Struktur.
2.
Naja, wie die PDF angezeigt wird, ob im Browser oder erst geladen und dann lokal über Adope, obliegt den Benutzereinstellungen des Besuchers.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 19. Mai 2009, 13:04
1) Oups? Bei Asp.Net?

2) Dann beziehe ich mich auf meine Anfrage auf eine beliebige HTML-Seite (dass diese also in einem neuen Register oder Browser angezeigt wird).

Stahli
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 20. Mai 2009, 10:50
Der lokae Dateizugriff geht so:
Delphi-Quellcode:
  
PdfDocFileName := Server.MapPath("PDFs\PdfDoc.pdf");
PdfDoc := new Document(PageSize.A4.Rotate);
...
PdfDoc.Close();
Response.Redirect('PDFs/PdfDoc.pdf', True);
Die Datei kann somit auf dem lokalen Testserver und einem öffentlichen Server korrekt angesprochen werden.


Lediglich die Möglichkeit, eine Seite in einem neuen Register/Browner zu öffnen fehlt mir noch.

Stahli
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: iTextSharp - Fontwechsel innerhalb Zelle

  Alt 24. Mai 2009, 21:35
Falls es mal jemand brauchen kann, hier ein Beispiel für eine PDF-Erstellung auf einer Asp.Net-Website mit Delphi Prism und iTextSharp...

Dies soll kein Tutorial ersetzen, sondern lediglich einige Tips für mögliche Lösungswege geben.
Da im Internet meist nur C#- oder VB-Beispiele zu finden sind gestaltet sich die Suche (für Umsteiger) teilw. recht schwierig.

Im Beispiel wird eine PDF mit dynamischen Namen in einem Unterordner der Website erstellt und gleich direkt im Browser angezeigt.
Das funktioniert auf einem lokalen Webserver und einem öffentlichen Webserver gleichermaßen.

Wenn jemand noch eine Möglichkeit kennt, die PDF in einem neuen BrowserFenster oder -Register anzuzeigen, dann wäre eine Info hier noch nett...


Stahli
Angehängte Dateien
Dateityp: txt demo_pdf_prism_itextsharp_207.txt (4,6 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz