![]() |
iTextSharp - Fontwechsel innerhalb Zelle
Hi,
ich erstelle eine PdfPTable:
Delphi-Quellcode:
Weiß jemand, wie ich INNERHALB der Zelle einen Fontwechsel veranlassen kann? Z.B:
...
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); ... "kleine Schrift" dann "groß+fett" dann "gelb hinterlegt" dann "grau hinterlegt"? Danke Stahli |
Re: iTextSharp - Fontwechsel innerhalb Zelle
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
Re: iTextSharp - Fontwechsel innerhalb Zelle
Das Projekt und die PDF-Erstellung funktioniert jetzt schon sehr gut. Allerdings gebe ich noch einen festen Ordner auf dem Server an:
Delphi-Quellcode:
Problem 1:
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 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 |
Re: iTextSharp - Fontwechsel innerhalb Zelle
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. |
Re: iTextSharp - Fontwechsel innerhalb Zelle
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 |
Re: iTextSharp - Fontwechsel innerhalb Zelle
Der lokae Dateizugriff geht so:
Delphi-Quellcode:
Die Datei kann somit auf dem lokalen Testserver und einem öffentlichen Server korrekt angesprochen werden.PdfDocFileName := Server.MapPath("PDFs\PdfDoc.pdf"); PdfDoc := new Document(PageSize.A4.Rotate); ... PdfDoc.Close(); Response.Redirect('PDFs/PdfDoc.pdf', True); Lediglich die Möglichkeit, eine Seite in einem neuen Register/Browner zu öffnen fehlt mir noch. Stahli |
Re: iTextSharp - Fontwechsel innerhalb Zelle
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz