2 Stimmen

ITextSharp alles funktioniert, aber beim Öffnen des PDF-Dokuments tritt ein seltsamer Fehler auf

Ich verwende iTextSharp, um mein PDF-Dokument dynamisch zu erstellen. Alles funktioniert gut und es gibt keine Fehler im Code; jedoch, wenn ich das erstellte PDF öffne, erhalte ich einen Fehler, der besagt, dass das Dokument nicht korrekt angezeigt wird, da es Fehler enthält.

Hier ist der Code unten, der mich vor ein Problem stellt:

public class pdfevents : PdfPageEventHelper
{
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        base.OnEndPage(writer, document);
        PdfContentByte cb = writer.DirectContent;
        cb.BeginText();

        cb.SetTextMatrix(20, document.GetBottom(-30));
        BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetFontAndSize(bf, 10);

        //das ist der Codeabschnitt, der Probleme verursacht
        //wenn ich es entferne, wird das Dokument ohne Fehler angezeigt
        cb.MoveTo(15F, document.GetBottom(-15));
        cb.SetLineWidth(0.5F);
        cb.LineTo(document.GetRight(0), document.GetBottom(-15));
        cb.Stroke();

        cb.ShowText(DateTime.Now.ToLongDateString());

        int n = writer.PageNumber;
        cb.SetTextMatrix(document.GetRight(20), document.GetBottom(-30));
        cb.ShowText(" - " + n + " - ");

        cb.EndText();
    }
}

Wenn ich die folgenden Zeilen entferne:

//das ist der Codeabschnitt, der Probleme verursacht
            //wenn ich es entferne, wird das Dokument ohne Fehler angezeigt
            cb.MoveTo(15F, document.GetBottom(-15));
            cb.SetLineWidth(0.5F);
            cb.LineTo(document.GetRight(0), document.GetBottom(-15));

Dann erhalte ich beim Öffnen des generierten PDF keine Fehlermeldung. Andernfalls kann ich das PDF öffnen und das Dokument sowie den Inhalt einschließlich der Linie sehen. Jedoch erhalte ich dann einen Fehler, dass das Dokument mit einem Fehler generiert wurde.

Kann mir jemand sagen, was falsch ist?

Vielen Dank im Voraus. cb.Stroke();

0voto

Dmitris Punkte 3348

Nachdem ich noch etwas mehr damit gespielt habe (lange Zeit), habe ich einen Workaround gefunden. Jetzt zeigt das Dokument nicht nur den Inhalt an (wie vorher), sondern gibt auch keine Fehlermeldung mehr aus.

Ich verstehe immer noch nicht, warum und wie diese Lösung funktioniert und die vorherige nicht, aber nur für den Fall, dass sie jemand benötigt oder ein ähnliches Problem hat.

Statt dessen:

PdfContentByte cb = writer.DirectContent;
        cb.BeginText();

        cb.SetTextMatrix(20, document.GetBottom(-30));
        BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.SetFontAndSize(bf, 10);

        // das ist der Codeabschnitt, der Probleme verursacht
        // wenn ich ihn entferne, wird das Dokument ohne Fehler angezeigt
        cb.MoveTo(15F, document.GetBottom(-15));
        cb.SetLineWidth(0.5F);
        cb.LineTo(document.GetRight(0), document.GetBottom(-15));
        cb.Stroke();

Ich habe die Positionen des Codes für die gezeichnete Linie mit dem Code für die Schrift geändert.

base.OnEndPage(writer, document);
        PdfContentByte cb = writer.DirectContent;

        // eine Linie zeichnen
        cb.MoveTo(15F, document.GetBottom(-15));
        cb.SetLineWidth(0.5F);
        cb.LineTo(document.GetRight(-10), document.GetBottom(-15));
        cb.Stroke();

 cb.BeginText();

            cb.SetTextMatrix(20, document.GetBottom(-30));
            BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            cb.SetFontAndSize(bf, 10);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X