9 Stimmen

Wie ersetzt man Text in einer PDF-Datei mit C#?

Ich habe hier viele Lösungen gesehen, aber keine davon ist klar oder eine gute Antwort.

Hier ist meine einfache Frage, in der Hoffnung auf eine direkte Antwort.

Ich habe eine PDF-Datei (eine Vorlage), die mit einem Text wie diesem erstellt wird:

{VORNAME} {NACHNAME} {ADRESSE} {TELEFONNUMMER}

Ist es möglich, C#-Code zu haben, der diese Vorlagen durch einen Text meiner Wahl ersetzt?

Keine Felder, kein anderes komplexes Zeug.

Gibt es eine Open-Source-Bibliothek, die mir dabei hilft, das zu erreichen?

11voto

albercik1985 Punkte 101

Dieser Thread ist tot, aber ich poste meine Lösung für andere verlorene Seelen, die dieses Problem in Zukunft haben könnten. Leider ist es in meinem Unternehmen nicht erlaubt, Code online zu posten, also werde ich die Lösung beschreiben :).

Im Grunde müssen Sie also PdfSharp verwenden und Folgendes ändern Muster um Text in stream zu ersetzen, aber Sie müssen berücksichtigen, dass der Text in viele Klammern aufgeteilt sein kann (wandeln Sie stream in string um, um das Format zu sehen).

Dann, mit Code ähnlich wie diese Probe die PDF-Quelle seitenweise durchlaufen und die aktuelle Seite ändern, indem sie nach PdfContent-Elementen in PdfReference-Elementen sucht und den Text im Content-Stream ersetzt.

5voto

Frank Punkte 3474

Das "Problem" bei PDF-Dokumenten ist, dass sie von Natur aus nicht für die Bearbeitung geeignet sind. Insbesondere solche ohne Felder. Am besten gehen Sie einen Schritt zurück und schauen sich Ihren Prozess an, um zu sehen, ob es eine Möglichkeit gibt, den Text zu ersetzen, bevor die PDF-Datei erstellt wurde. Natürlich haben Sie diese Möglichkeit nicht immer.

Wenn Sie in der Lage sind, Text zu ersetzen, sollten Sie sich darüber im Klaren sein, dass der auf den ersetzten Text folgende Text nicht automatisch umbrochen wird. Wenn Sie damit einverstanden sind, gibt es nur sehr wenige Lösungen, mit denen Sie Text ersetzen können.

Ich weiß, dass Sie auf der Suche nach einer OpenSource-Lösung sind, daher zögere ich, Ihnen eine kommerzielle Lösung anzubieten. Wir bieten eine Lösung namens PDFKit.NET an. Es erlaubt Ihnen, alle Inhalte einer Seite als sogenannte Shapes (Text, Bilder, Kurven, etc.) zu extrahieren. Siehe Methode Page.CreateShapes in der Typreferenz. Sie können dann programmatisch durch diese Struktur von Shapes navigieren und sie bearbeiten und dann wieder in ein PDF zurückschreiben.

Hier ist sie: http://www.tallcomponents.com/pdfkit

Offenlegung: Ich bin der Gründer von TallComponents, dem Hersteller dieser Komponente

4voto

Aistis Raudys Punkte 101

Für einfaches Ersetzen von Text verwenden Sie iTextSharp Bibliothek. Der Code, der eine Zeichenkette durch eine andere ersetzt, steht unten. Beachten Sie, dass dies nur einfachen Text ersetzt und möglicherweise nicht in allen Fällen funktioniert.

    //using iTextSharp.text.pdf;
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText)
    {
        using (PdfReader reader = new PdfReader(OrigFile))
        {
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                byte[] contentBytes = reader.GetPageContent(i);
                string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING);
                contentString = contentString.Replace(origText, replaceText);
                reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING));
            }
            new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close();
        }
    }

3voto

MadBoy Punkte 10521

Wie in ähnlicher Thread dies ist nicht wirklich auf einfache Weise möglich. Der einfachere Weg scheint es zu sein, eine DocX-Datei zu erhalten und mit DocX Bibliothek, die den einfachen Austausch von Wörtern und die anschließende Konvertierung von DocX in PDF (z. B. mit dem Drucker PDF Creator) ermöglicht.

Oder verwenden Sie pdf scharf/migradoc um neue Dokumente zu erstellen.

0voto

astef Punkte 7162

Die Aktualisierung in PDF ist schwierig und schmutzig. So kann sein Hinzufügen eines Inhalts wird auch bei Ihnen funktionieren, so wie es bei mir funktioniert hat. Wenn ja, hier ist meine primitive, aber funktionierende Lösung für viele Fälle ("Abdeckung", in der Tat):

https://github.com/astef/PatchPdfText

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