2017-05-09 3 views
-4

Ich benutze iText 7 mit C# und ich muss eine lange Zeile schreiben.iText7, Gibt es eine Möglichkeit, Wagenrücklauf in Rechteck zu steuern?

Mit canvas.BeginText().ShowText("My text") kann ich keinen Weg finden, den Text in einer zweiten Zeile passieren zu lassen, \n wird nicht erkannt.

Also habe ich Rechtecke und Dokument-Renderer verwendet, aber ich habe das gleiche Problem, ich kann nicht steuern, wo ich meinen Text eine neue Zeile erstellen möchte.

Ich benutze eine vorhandene PDF (ein Modell), wo ich einige Texte schreiben muss (so kurz wie eine einzelne Zeile) und einige Absätze (bestehend aus mehreren Zeilen). Diese Elemente sind in einer XML-Datei definiert, in der einige Zeilenumbrüche zum Abgrenzen neuer Zeilen in Absätzen verwendet werden können. Kurz, das Dokument wird dynamisch erstellt und sein Inhalt und die Platzierung des Elements werden in einer XML-Datei definiert.

+0

Warum verwenden Sie Low-Level-Methoden, wenn Sie Text hinzufügen möchten, der in ein Rechteck passt? Siehe [Kapitel 2] (http://developers.itextpdf.com/content/itext-7-building-blocks/chapter-2-working-rootelement) des Tutorials. Gibt es einen Grund, warum Sie etwas auf eine schwierige Art und Weise tun möchten, die auf eine viel einfachere Weise durchgeführt werden kann? –

Antwort

1

Hinzufügen von Inhalten mit Low-Level-Methoden wie BeginText(), ShowText(), EndText() und so weiter, erfordern fundierte Kenntnisse der PDF-Spezifikation (ISO 32000). Die Tatsache, dass Sie überrascht sind, dass \n ignoriert wird, sagt mir, dass Sie in PDF nicht so versiert sind.

iText wurde für Leute geschrieben, die sich nicht mit der Low-Level-Syntax von PDF beschäftigen wollen. Zum Beispiel: Wenn Sie Text in einem Rechteck mit iText hinzufügen mögen, müssen Sie nur noch ein Canvas-Objekt erstellen, den Sie ein Rectangle Objekt übergeben:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
PdfPage page = pdf.AddNewPage(); 
PdfCanvas pdfCanvas = new PdfCanvas(page); 
Rectangle rectangle = new Rectangle(36, 650, 100, 100); 
Canvas canvas = new Canvas(pdfCanvas, pdf, rectangle); 
PdfFont font = PdfFontFactory.CreateFont(FontConstants.TIMES_ROMAN); 
PdfFont bold = PdfFontFactory.CreateFont(FontConstants.TIMES_BOLD); 
Text title = 
    new Text("The Strange Case of Dr. Jekyll and Mr. Hyde").SetFont(bold); 
Text author = new Text("Robert Louis Stevenson").SetFont(font); 
Paragraph p = new Paragraph().Add(title).Add(" by ").Add(author); 
canvas.Add(p); 
pdf.Close(); 

Dieses Beispiel kann in chapter 2 der Online-iText 7 finden Anleitung. long sentence inside a rectangle

Der Screenshot zeigt, wie ein langer Satz in einem Rectangle hinzugefügt wurde, und wie dieser Satz über verschiedene Leitungen verteilt wurde (neue Zeilen automatisch Einführung). Das Konzept des \n Zeichens existiert nicht in PDF (überprüfen Sie ISO 32000 im Zweifel). Wenn Sie eine neue Zeile einfügen möchten, ist es ausreichend, einen Teil des Inhalts in eine und den anderen Teil in eine andere Paragraph zu setzen.

+0

@herve Jetzt zum Thema: Der Screenshot, den ich hinzugefügt habe, zeigt, wie ein langer Satz innerhalb eines Rechtecks ​​hinzugefügt wurde und wie dieser Satz über verschiedene Zeilen verteilt wurde (automatisch neue Zeilen eingefügt wurden). Das Konzept des '\ n'-Zeichens existiert in PDF nicht (überprüfen Sie im Zweifelsfall ISO 32000). Wenn Sie einen Zeilenumbruch einführen möchten, genügt es, einen Teil des Inhalts in einen "Absatz" und den anderen Teil in einen anderen "Absatz" zu schreiben. Warum löst das nicht dein Problem? –

+0

Danke für deine Antwort. Es löst das Problem teilweise. In meinem Fall benutze ich ein existierendes PDF (ein Modell), wo ich einige Texte schreiben muss (so kurz wie eine einzelne Zeile) und einige Absätze (die aus mehreren Zeilen bestehen). Diese Elemente sind in einer XML-Datei definiert, in der einige Zeilenumbrüche zum Abgrenzen neuer Zeilen in Absätzen verwendet werden können. Kurz, das Dokument wird dynamisch erstellt und sein Inhalt und die Platzierung des Elements werden in einer XML-Datei definiert. – herve

+0

Das war nicht klar von Ihrer Frage. Wir empfehlen Ihnen, Ihre Frage zu verbessern. Dies ist Ihre Chance, dies zu tun. Bitte beachten Sie, dass PDF kein Textverarbeitungsformat ist. Der gesamte Inhalt einer PDF-Datei wird an absoluten Koordinaten (festen Positionen) hinzugefügt. Sie können nicht einfach Inhalte hinzufügen und erwarten, dass sich der vorhandene Inhalt an den neuen Inhalt anpasst. Vielleicht möchten Sie erklären, dass die Verwendung eines statischen Dokuments (der vorhandenen PDF-Datei) nicht im Widerspruch zu Ihrer Behauptung steht, dass Sie ein Dokument dynamisch erstellen.Weitere Klärung ist erforderlich. –

Verwandte Themen