10
votes

Image auto redimensionne dans pdfpcell avec iTextShaRP

Je suis un problème étrange avec des images dans ItextShaRP Bibliothèque. J'ajoute l'image au PDFPCell et pour une raison quelconque, elle est intentionnelle. Comment puis-je la garder à la taille originale?

Je pense que les images seraient identiques lorsqu'elles sont imprimées, mais la différence sur la photo est la même sur la version imprimée. Avoir à échelle manuellement l'image avec Scalexxx pour l'obtenir à droite semble un peu illogique et ne donne pas un bon résultat. P>

alors comment puis-je mettre l'image dans sa taille d'origine à l'intérieur d'une table d'une table sans Avoir à l'échelle? p>

Voici mon code: P>

private PdfPTable CreateTestPDF()
{
    PdfPTable table = new PdfPTable(1);
    table.WidthPercentage = 100;

    Phrase phrase = new Phrase("MY TITLE", _font24Bold);
    table.AddCell(phrase);

    PdfPTable nestedTable = new PdfPTable(5);
    table.WidthPercentage = 100;

    Phrase cellText = new Phrase("cell 1", _font9BoldBlack);
    nestedTable.AddCell(cellText);

    cellText = new Phrase("cell 2", _font9BoldBlack);
    nestedTable.AddCell(cellText);

    cellText = new Phrase("cell 3", _font9BoldBlack);
    nestedTable.AddCell(cellText);

    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(@"d:\MyPic.jpg");
    image.Alignment = iTextSharp.text.Image.ALIGN_CENTER;
    PdfPCell cell = new PdfPCell(image);
    cell.HorizontalAlignment = PdfPCell.ALIGN_MIDDLE;
    nestedTable.AddCell(cell);

    cellText = new Phrase("cell 5", _font9BoldBlack);
    nestedTable.AddCell(cellText);

    nestedTable.AddCell("");

    string articleInfo = "Test Text";
    cellText = new Phrase(articleInfo, _font8Black);
    nestedTable.AddCell(cellText);

    nestedTable.AddCell("");
    nestedTable.AddCell("");
    nestedTable.AddCell("");

    table.AddCell(nestedTable);
    SetBorderSizeForAllCells(table, iTextSharp.text.Rectangle.NO_BORDER);
    return table;
}

static BaseColor _textColor = new BaseColor(154, 154, 154);
iTextSharp.text.Font _font8 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font8Black = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 8, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
iTextSharp.text.Font _font9 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 9, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font9BoldBlack = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 9, iTextSharp.text.Font.BOLD, BaseColor.BLACK);
iTextSharp.text.Font _font10 = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, _textColor);
iTextSharp.text.Font _font10Black = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.NORMAL, BaseColor.BLACK);
iTextSharp.text.Font _font10BoldBlack = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 10, iTextSharp.text.Font.BOLD, BaseColor.BLACK);
iTextSharp.text.Font _font24Bold = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 24, iTextSharp.text.Font.BOLD, _textColor);


4 commentaires

Quelle version d'Itexthaparp utilisez-vous?


C'est comme 4 heures du matin en Slovénie. Avez-vous déjà dormi? :)


En fait, il est déjà 5 heures du matin. C'est une de ces nuits où je plonges profondément dans quelque chose, oublie le temps et juste sauter la nuit :)


@Mladenprajdic pouvez-vous réparer les images?


5 Réponses :


15
votes

J'utilise v4.1.2 iTextSharp et je reçois le comportement suivant:

En utilisant ce code, en ajoutant l'image directement à la table via la méthode AddCell, l'image est agrandie pour adapter la cellule: p >

document.add(image)


4 commentaires

J'ai essayé pdfpcell cellt = nouveau pdfpcell (image); et doc.add (image); (Direct to Document Ajouter) et ils donnent le résultat de la même taille. Est-il possible qu'il a quelque chose à voir avec les DPI?


Oui. Beaucoup d'images, comme ce qui serait affichée dans Paint.Net, sont 96 dpi (ou autre chose). ITEXTSHARP utilise toujours 72 dpi. Je sais que si le DPI de votre image est différent de 72, vous pouvez obtenir des résultats différents. J'avais oublié cela, car je crée toujours mon "à utiliser dans les images PDF" à 72DPI.


72? dit ici dans la réponse acceptée, c'est 110: Stackoverflow.com/questions/2752789/... ou ai-je mal compris cette réponse?


Je ne sais plus ... tout ce que j'essaie ne fonctionne pas pour moi ... aucune chance que je puisse vous envoyer la solution et l'image que j'ai afin que vous puissiez l'essayer avec ça? Je suis totalement souples par ce ...



3
votes

Donc, si vous devez conserver la taille de l'image dans le PDFPCELL, vous pouvez louer à ce code:

                iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imageFilePath);

                 // Save the image width
                float width = image.Width;
                PdfPCell cell = new PdfPCell();
                cell.AddElement(image);


                // Now find the Image element in the cell and resize it
                foreach (IElement element in cell.CompositeElements)
                {
                    // The inserted image is stored in a PdfPTable, so when you find 
                    // the table element just set the table width with the image width, and lock it.
                    PdfPTable tblImg = element as PdfPTable;
                    if (tblImg != null)
                    {
                        tblImg.TotalWidth = width;
                        tblImg.LockedWidth = true;
                    }
                }


0 commentaires

9
votes

La réponse d'@ Stewbob travaille, mais elle ne concerne que les méthodes de la table.

La chose avec ItextShaparpe est qu'elle se comportera différemment en fonction du constructeur que vous utilisez. Cela va (ennuyeusement) à l'échelle de l'image pour remplir la cellule: p> xxx pré>

mais cela laissera l'image à la taille que vous définissez (et permettra d'aligner): P>

PdfPCell c = new PdfPCell(image);  
c.setHorizontalAlignment(Element.ALIGN_CENTER);


2 commentaires

Cela pourrait être la fonctionnalité la plus étrange et non un bug que j'ai jamais vu. Merci beaucoup


Upvot cette réponse parce que cela m'a permis de trouver une solution pour le même problème. Mais j'ai fait face à un comportement complètement différent - la méthode AddElement laisse l'image à la taille que vous définissez mais que le constructeur redimensionne l'image. J'utilise ITEXTSHARP 5.5.3.0.



1
votes

La fonction a une propriété adaptée à l'image. Ajoutez seulement un vrai xxx


2 commentaires

Quelle version d'Itexthaparpe ou quel type de variable 'cellt' utilisez-vous? Dans mon (type PDFPCell), je ne peux trouver que la méthode: addelement (élément d'ielement)


Je n'ai pas cette surcharge non plus - en utilisant iTextShaRP 5.5.9.



0
votes

Pour ceux qui demandent la surcharge, utilisez ceci: xxx

au lieu de: xxx


0 commentaires