Betrachten Sie den folgenden Code ein:iTextSharp GetWidthPoint() enthält nicht den Zeichenabstand
var path = AppDomain.CurrentDomain.BaseDirectory;
var filePath = Path.Combine(path, "test1.pdf");
using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
using (var document = new Document(new Rectangle(PageSize.A4.Width, PageSize.A4.Height)))
using (var writer = PdfWriter.GetInstance(document, stream))
{
try
{
document.Open();
const string value = "The quick brown fox";
for (int i = 0; i < 4; i++)
{
var chunk = new Chunk(value);
chunk.SetCharacterSpacing(i);
var origin = new Phrase(chunk);
var paragraph1 = new Paragraph(origin);
document.Add(paragraph1);
var widthPoint = chunk.GetWidthPoint();
Debug.WriteLine(widthPoint);
}
writer.CloseStream = false;
}
finally
{
document.Close();
stream.Close();
}
}
ich versucht bin, einen Absatz/Brocken auf einen einzigen PdfPCell in einem neuen PdfPTable hinzuzufügen. Wir haben keine Kontrolle über den tatsächlichen Text, der in die Zellen hineingeht, und es ist möglich, dass der Text etwas länger ist als der verfügbare Platz. Entweder würde der Text auf mehrere Zeilen aufbrechen oder aus der Zelle herausfließen und versteckt werden.
Die Idee ist, den Buchstabenabstand des Textes automatisch zu reduzieren (bis zu einem Mindestbetrag), um zu versuchen, den beschnittenen Text abzuschwächen. Im Grunde einen kleinen negativen Buchstabenabstand anwenden, bis der Text passt. Das Problem ist, dass der Wert von widthPoint immer gleich ist, unabhängig vom verwendeten Buchstabenabstand. Die erzeugte PDF hat deutlich den Text mit unterschiedlichen Breiten gerendert.
Gibt es eine Möglichkeit, die tatsächliche Breite des Textes mit Buchstabenabstand zu berechnen, oder es ist Container? Der Chunk/Absatz sind (wie ich es beschreiben würde) Box-Model-Typ-Elemente. Das heißt, sie füllen die Zelle und haben immer die gleiche Breite.
Keine Ahnung, wie Sie vorgehen.
Dies ist für iTextSharp Version 5.5.9.0
Ehrlich, ich hätte schwören können, dass ich das probiert habe! GAH! Vielen Dank. –