Est-il possible de définir un fond dégradé sur pdfcell ou paragraphe? Ou dois-je utiliser l'image?Fond dégradé Itextsharp
Répondre
Oui, iText et iTextSharp prennent en charge les couleurs dégradées. L'objet PdfShading
possède plusieurs méthodes statiques qui créent différents types d'objets PdfShading
pour vous. Les deux qui vous intéressent le plus sont SimpleAxial
et SimpleRadial
. Il y a trois autres noms nommés Type1
, Type2
et Type3
que je n'ai pas encore explorés.
Une fois que vous avez un objet PdfShading
, vous pouvez créer un PdfShadingPattern
directement à partir de celui-ci et une fois que vous en avez, vous pouvez en créer un ShadingColor
. ShadingColor
est finalement dérivé de BaseColor
donc vous devriez être capable de l'utiliser partout où c'est utilisé. Dans votre cas, vous souhaitez l'affecter à un BackgroundColor
. Ci-dessous, une application WinForms complète qui cible iTextSharp 5.1.1.0 qui affiche une table avec deux colonnes, chacune avec ses propres couleurs de fond dégradées.
NOTE: Les coordonnées (x, y) des méthodes statiques PdfShading
sont au niveau du document et non au niveau de la cellule. Cela signifie que vous ne pourrez peut-être pas réutiliser les objets PdfShading
en fonction de la taille du dégradé. Après cet exemple ci-dessous, je vais vous montrer comment surmonter cette limitation en utilisant des événements cellulaires.
using System;
using System.Text;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Test file name
string TestFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
//Standard iTextSharp setup
using (FileStream fs = new FileStream(TestFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (Document doc = new Document(PageSize.LETTER))
{
using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
{
//Open the document for writing
doc.Open();
//Create a shading object. The (x,y)'s appear to be document-level instead of cell-level so they need to be played with
PdfShading shading = PdfShading.SimpleAxial(w, 0, 700, 300, 700, BaseColor.BLUE, BaseColor.RED);
//Create a pattern from our shading object
PdfShadingPattern pattern = new PdfShadingPattern(shading);
//Create a color from our patter
ShadingColor color = new ShadingColor(pattern);
//Create a standard two column table
PdfPTable t = new PdfPTable(2);
//Add a text cell setting the background color through object initialization
t.AddCell(new PdfPCell(new Phrase("Hello")) { BackgroundColor = color });
//Add another cell with everything inline. Notice that the (x,y)'s have been updated
t.AddCell(new PdfPCell(new Phrase("World")) { BackgroundColor = new ShadingColor(new PdfShadingPattern(PdfShading.SimpleAxial(w, 400, 700, 600, 700, BaseColor.PINK, BaseColor.CYAN))) });
//Add the table to the document
doc.Add(t);
//Close the document
doc.Close();
}
}
}
this.Close();
}
}
}
Exemple 2
Comme il est indiqué ci-dessus, la méthode ci-dessus utilise la position au niveau du document qui est souvent pas assez bon. Pour surmonter cela, vous devez utiliser le positionnement au niveau de la cellule et, pour ce faire, vous devez utiliser des événements de cellule car les positions de cellule ne sont pas connues tant que la table n'est pas restituée. Pour utiliser un événement de cellule, vous devez créer une nouvelle classe qui implémente IPdfPCellEvent
et gère la méthode CellLayout
. Ci-dessous le code mis à jour qui fait tout cela:
using System;
using System.Text;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Test file name
string TestFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
//Standard iTextSharp setup
using (FileStream fs = new FileStream(TestFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (Document doc = new Document(PageSize.LETTER))
{
using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
{
//Open the document for writing
doc.Open();
//Create a standard two column table
PdfPTable t = new PdfPTable(2);
//Create an instance of our custom cell event class, passing in our main writer which is needed by the PdfShading object
var CE = new GradientBackgroundEvent(w);
//Set the default cell's event to our handler
t.DefaultCell.CellEvent = CE;
//Add cells normally
t.AddCell("Hello");
t.AddCell("World");
//Add the table to the document
doc.Add(t);
//Close the document
doc.Close();
}
}
}
this.Close();
}
public class GradientBackgroundEvent : IPdfPCellEvent
{
//Holds pointer to main PdfWriter object
private PdfWriter w;
//Constructor
public GradientBackgroundEvent(PdfWriter w)
{
this.w = w;
}
public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
{
//Create a shading object with cell-specific coords
PdfShading shading = PdfShading.SimpleAxial(w, position.Left, position.Bottom, position.Right, position.Top, BaseColor.BLUE, BaseColor.RED);
//Create a pattern from our shading object
PdfShadingPattern pattern = new PdfShadingPattern(shading);
//Create a color from our patter
ShadingColor color = new ShadingColor(pattern);
//Get the background canvas. NOTE, If using an older version of iTextSharp (4.x) you might need to get the canvas in a different way
PdfContentByte cb = canvases[PdfPTable.BACKGROUNDCANVAS];
//Set the background color of the given rectable to our shading pattern
position.BackgroundColor = color;
//Fill the rectangle
cb.Rectangle(position);
}
}
}
}
Si quelqu'un d'autre est toujours intéressé que je cherchais à savoir comment colorer tout le fond avec un gradient vous pouvez le faire comme ça ....
PdfShading shading = PdfShading.simpleAxial(writer, 0, pageH, pageW, 0,
BaseColor.WHITE, BaseColor.LIGHT_GRAY);
PdfShadingPattern pattern = new PdfShadingPattern(shading);
cb.setShadingFill(pattern);
// cb.circle(500, 500, 500);
cb.rectangle(0, 0, pageW, pageH);
cb.fill();
- 1. itextsharp firefox fond noir
- 2. Fond dégradé UIScrollView
- 3. JPanel fond dégradé
- 4. Jquery fond dégradé fondu
- 5. Fond CSS Dégradé Répétition Numéro
- 6. Fond de dégradé pour JToolBar
- 7. comment réparer un fond dégradé?
- 8. Fond de texture de dégradé
- 9. Fond dégradé animé en CSS
- 10. Fond de répétition dégradé CSS
- 11. Déchirure en fond dégradé radial
- 12. Fond dégradé fixe avec css
- 13. CSS IE corps fond dégradé
- 14. Avoir un dégradé sur du texte sur un fond dégradé
- 15. barre inférieure fixe avec fond dégradé css
- 16. CSS Arrondis Table Corners, Fond dégradé
- 17. iphone: Fond dégradé UIWebview avec CSS possible?
- 18. Fond dégradé css avec plusieurs images
- 19. Transition CSS avec dégradé de fond
- 20. StackPanel avec fond arrondi et dégradé
- 21. Comment créer un fond dégradé professionnel
- 22. Comment positionner un fond dégradé radial
- 23. Créer un fond de dégradé en HTML
- 24. SWT Link scintille avec fond dégradé
- 25. Fond dégradé HTML/CSS sur une table
- 26. Comment faire un dégradé de texte avec une ombre portée sur un fond dégradé?
- 27. Dégradé de dégradé pourpre et blanc
- 28. Dégradé blanc à transparent avec l'image de fond
- 29. Fond dégradé CSS3 avec des espaces blancs indésirables en bas
- 30. Utiliser le dégradé css sur l'image de fond
Bonne réponse. La documentation de Frite itext devrait se lire comme ceci. – Paddy
@ChirsAvez-vous une chance de m'aider à remplir un cercle avec un dégradé radial commençant au centre? jolie s'il-vous-plaît – Ben