Berechnen Sie die Texthöhe anhand der verfügbaren Breite und schriftart?
Wir erstellen von PDF-Dokumenten on-the-fly aus der Datenbank mit PDFsharp.
Ich muss wissen, der beste Weg, um die Berechnung der Höhe der text-Bereich basiert
auf die verwendete schriftart und die zur Verfügung stehende Breite.
Ich brauche, um zu wissen, die Höhe, so kann ich verarbeiten, Seitenumbrüche, wenn erforderlich.
InformationsquelleAutor der Frage c00ke | 2009-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Recht, aber wenn mit PDFsharp rufen Sie XGraphics.MeasureString.
InformationsquelleAutor der Antwort The sky is the limit
Die PdfSharp.Zeichnung.XGraphics-Objekt hat eine MeasureString-Methode zurückgibt, was Sie benötigen.
Dies sollte Ihnen dabei helfen. Bitte beachten Sie, dass ich nicht diesen code testen, als ich es schrieb auf die Fliegen, um zu helfen. Es enthält möglicherweise einige compile-Zeit Fehler, aber Sie bekommen die Idee.
InformationsquelleAutor der Antwort Will Marcouiller
In .NET können Sie anrufen Grafik.MeasureString um herauszufinden, wie groß der text gezeichnet wird.
InformationsquelleAutor der Antwort onedozenbagels
Ich hatte ein ähnliches problem, also ich implementiert diese Erweiterung-Methode:
InformationsquelleAutor der Antwort Christian Lykke
Schrieb ich eine kleine extension-Methode auf die XGraphic Objekt genau das zu tun : Calclulate den genauen Wortlaut der Höhe (und Breite) durch Angabe der maxWidth.
Siehe die folgende Kernaussage für den code : https://gist.github.com/erichillah/d198f4a1c9e8f7df0739b955b245512a
InformationsquelleAutor der Antwort Eric H.
Den OP gefragt, wie zu berechnen, die text-Höhe, basierend auf verfügbare Breite und Schrift. Windows .NET bietet eine API-aufrufen für diese, die eine Breite argument; die version von PDFsharp ich bin mit (0.9.653, .NET 1.1) nicht.
Meine Lösung - verwenden .NET-API-Aufruf mit einem Graphics-Objekt zugeordnet, für die eine benutzerdefinierte erstellte Bitmap-Objekt um die Antwort zu bekommen.
Was für mich gearbeitet war, ein Bitmap, hatte 100 DPI Auflösung (kritisch) passiert und die Größe einer Seite im Hochformat (wahrscheinlich weniger kritisch).
Dann habe ich einfach gefragt .NET, was die pixel-Größe für die Malerei auf das bitmap.
Wahrscheinlich werden Sie dann die zu konvertierenden Einheiten von 1/100stel Zoll, um Punkte (für PDFsharp).
InformationsquelleAutor der Antwort rich p
Falls jemand noch will, eine Antwort zu finden, ich habe implementiert eine einigermaßen leicht verständliche Methode, um herauszufinden, die Höhe des resultierenden text.
Erklärung der code:
Ersten, den text drucken. Ich enthalten einen Optionalen XTextFormatter genannt tf, weil ich entweder XGraphics oder XTextFormatters austauschbar in meiner Anwendung.
Dann berechnen, wie lange der text wurde von MeasureString().Der Breite.
Dann berechnen, wie viele Zeilen text gab es. Dies geschieht durch Unterteilung der Gesamt-Länge des Textes gefunden, die zuvor von der Breite der angegebene Rechteck (box), in dem die Mehrwertsteuer gedruckt. Ich hab es mit einer while-Schleife hier.
Multiplizieren Sie die Höhe des Textes (mit graph.MeasureString().Höhe) durch die Anzahl der Linien, die dort waren. Dies ist die endgültige Höhe des Textes.
Return die Höhe. Nun, den Aufruf der PrintString () - Funktion druckt den text zur Verfügung gestellt, während Rücksendung der Höhe des gedruckten Textes hinterher.
InformationsquelleAutor der Antwort Wakka02
PDFsharp enthält eine Klasse XTextFormatter, die verwendet werden können zum zeichnen von text mit Zeilenumbrüche.
Es kann jedoch nicht bestimmen, wird die Höhe benötigt, für den text. Inspiriert durch einen Kommentar von @Wakka02 ich verbesserte diese Klasse, die Erstellung von Klassen-XTextFormatterEx.
Meiner Meinung nach ist es auch Antworten zu der ursprünglichen Frage, daher poste ich die Antwort.
Ich weiß, das ist eine alte Frage und die Antwort kann nicht helfen, die OP, aber es ist eine Häufig gestellte Frage, und die Antwort kann anderen helfen.
Die neue Klasse 500 Zeilen code - und ich denke, das wäre zu viel für diesen Beitrag.
Den Quellcode finden Sie auf der PDFsharp forum:
http://forum.pdfsharp.net/viewtopic.php?p=9213#p9213
Kann es auch in meinem bescheidenen blog:
http://developer.th-soft.com/developer/pdfsharp-improving-the-xtextformatter-class-measuring-the-height-of-the-text/
Bei der Verwendung der neuen Klasse können Sie den ersten Anruf
PrepareDrawString
um herauszufinden, wie viel von dem text passt und in welcher Höhe sich der passende text. Dann ist dein decoder daraus ziehen kann vorbereitete Texte oder bereiten Sie einem anderen text oder bereiten Sie den gleichen text mit einem anderen Rechteck.Meine neue Klasse bei der Arbeit:
XTextFormatterEx tf = new XTextFormatterEx(gfx);
int lastCharIndex;
Doppel-neededHeight;
Vorbereitung des Textes ruft MeasureString viele Male. Später vorbereiteten text gezogen werden können, ohne Berufung auf MeasureString wieder.
Als heute (Juli 17, 2015) die Klasse XTextFormatterEx (wie das original XTextFormatter) verwendet den internen Bereichen der XFont-Klasse. Dies erfordert eine Besondere Behandlung beim kompilieren der Klasse. Ich entschied mich zu kopieren, meine XTextFormatterEx Klasse in die PDFsharp Ordner nach dem Download der komplette source Paket für PDFsharp 1.32.
Jemand versucht zu ändern, entweder die XTextFormatter oder XTextFormatterEx Klasse wird das gleiche problem haben.
Ich hoffe dieses Problem wird gelöst mit zukünftigen Versionen von PDFsharp, so dass modifizierte Versionen dieser Klassen werden in der Anwendung enthalten-Projekt.
InformationsquelleAutor der Antwort Vive la déraison