Bild auto passt in PdfPCell mit iTextSharp
Ich habe ein seltsames problem mit Bildern in der iTextSharp-Bibliothek.
Ich bin hinzufügen, das Bild auf die PdfPCell und für einige Grund wird es skaliert.
Wie halte ich es auf Originalgröße?
Ich aber, dass die Bilder gleichen, wenn es gedruckt wird aber der Unterschied auf dem Bild ist das gleiche auf die gedruckte version. Manuell skalieren Sie das Bild mit ScaleXXX, um es zu Recht scheint mir ein bisschen unlogisch und nicht geben, ein gutes Ergebnis.
So, wie ich das Bild in seiner ursprünglichen Größe innerhalb einer PdfPCell einer Tabelle, ohne zu skalieren?
Hier ist mein code:
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);
- Welche version von iTextSharp verwenden Sie?
- ich bin mit iTextSharp 5.0.2.0
- Es ist wie 4 Uhr in Slowenien. Haben Sie jemals schlafen? 🙂
- tatsächlich ist es schon 5 Uhr. Es ist eine jener Nächte, in denen ich tief Tauchen Sie ein in etwas, vergessen Sie die Zeit und überspringen Sie einfach die Nacht 🙂
- Sie können fix die Bilder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwende ich iTextSharp v4.1.2 und ich bekomme folgende Verhalten:
Mithilfe dieses Codes, indem man das Bild direkt in der Tabelle über die AddCell-Methode, wird das Bild skaliert werden, passen die Zelle:
Mithilfe dieses Codes, indem man das Bild in eine Zelle, und füge dann die Zelle der Tabelle, wird das Bild in Originalgröße dargestellt:
Haben Sie die Bilder direkt im pdf-Dokument (außerhalb der Tabelle), nur um zu vergleichen/überprüfen Sie die Bild-Größe?
Ich davon ausgehen, dass Sie möchten, dass das Bild zentriert in der Zelle mit etwas Platz um Sie herum. Als letzten Ausweg, können Sie ändern Sie Ihr Bild. Machen es zu einem png mit transparentem hintergrund, und stellen Sie sicher, dass es einige transparente "margin" um alle Kanten des Bildes.
BEARBEITEN
Ich habe gerade heruntergeladen der v5.0.2 und ich bekomme die gleichen Ergebnisse, wie oben erwähnt. Ich habe versucht es mit Bildern, die sind beide kleiner und größer als die Größe der Zelle, und das Verhalten ist das gleiche; die erste Methode skaliert das Bild, die zweite Methode nicht.
BEARBEITEN
Gut, anscheinend habe ich Unrecht für Jahre über die ganze DPI-Sache, wenn es um Bilder geht. Ich kann nicht scheinen, um zu sehen, dass es überhaupt einen Unterschied macht, was der DPI-Wert des Bildes ist.
Ich erstellte eine 600x400px Bild in drei verschiedenen Auflösungen 72 dpi, 96 dpi, und 110 dpi. Dann habe ich jedes dieser Bilder in ein neues Dokument, das war genau das, 600x400.
Für jede der drei Bild-Dateien, wenn Sie das Dokument mit
passen Sie das Dokument perfekt, mit keine Unterschiede für die verschiedenen DPI-Einstellungen.
@Stewbob Antwort funktioniert, aber es ist nur nebenbei Bezug auf die Methoden der Tabelle.
Die Sache mit iTextSharp ist, dass es sich anders Verhalten, je nachdem, welchen Konstruktor Sie verwenden. Dies wird (ärgerlicherweise) skalieren das Bild und füllt die Zelle:
Aber dieser wird das Bild auf die Größe, die Sie es (und damit für die Ausrichtung):
Ich weiß nicht genau, warum das so ist, es hat etwas zu tun mit der Zelle im 'text-Modus', wenn Sie das Bild im Konstruktor versus composite-Modus", wenn Sie es später hinzufügen (in dem Fall jedes Objekt soll sich nach eigenen Ausrichtung).
Paar mehr Infos (in Java, aber immer noch gilt) http://tutorials.jenkov.com/java-itext/table.html#cell-modes
Also, wenn Sie zu mantain die Größe des Bildes in der PdfPCell Sie können loock an diesem code :
Die Funktion hat eine Eigenschaft Bild passen. Nur eine wahr
Für diejenigen, die Fragen für die überlastung, verwenden Sie diese :
statt :