Zum Fußzeileninhalt springen
IRONPDF NUTZEN

Wie man Daten aus PDF-Dateien in ASP.NET Core liest

Das Problem Mit Der Manuellen Beleg- Und Etikettenerstellung

IronPDF-Startseite Auf einem Lagerboden, der täglich 500 Aufträge über zwei Schichten bearbeitet, toleriert der Kommissionier-Verpack-Versand-Zyklus keine Reibungen. Das Drucken der Packzettel einzeln von einer OMS-Anzeige, das manuelle Kopieren von Auftragsdetails in eine Etikettenvorlage oder das Warten auf ein Etikettensoftware-Tool, das sich nicht sauber in das .NET-Backend integriert, fügt jedem Auftrag Sekunden hinzu, die sich bis zum Ende der Schicht zu echten Durchsatzverlusten summieren.

Das Fehlerpotenzial wächst parallel zu den Zeitkosten. Wenn Versandadressen manuell transkribiert werden, anstatt direkt aus dem Auftragsdatensatz erfasst, passieren Versandpannen. Eine zurückgesendete Sendung wegen einer falschen Adresse kostet mehr Arbeitskraft- und Frachtgebühren als die Marge bei den meisten Einzelaufträgen. Von den Frachtunternehmen bereitgestellte Etikettentools lösen das Adressproblem, erzeugen aber nicht den artikulierten Packzettel, den der Lagerboden benötigt, um den Boxinhalt vor dem Versiegeln zu überprüfen. Diese erfordern immer noch einen separaten Ausdruck aus einem anderen System.

Batch-Druck ist dort, wo die meisten Ansätze vollständig zusammenbrechen. Ein Betriebsleiter, der eine Welle von 200 Aufträgen freigibt, benötigt diese Packzettel zu Schichtbeginn, nicht einzeln über eine Webschnittstelle generiert, die bei jedem Auftrag einen neuen Druckdialog öffnet. Das Format muss auf jedem Drucker auf dem Boden funktionieren, ob Laser, Tintenstrahl oder Thermodrucker, ohne proprietäre Treiber auf Arbeitsplatzrechnern zu installieren.

Die Szenarien sind konsistent: Eine Direktvertriebsmarke verpackt täglich Hunderte Bestellungen, ein B2B-Händler erzeugt mehrzeilige Packzettel für Palettensendungen, ein Abo-Box-Service druckt Artikellisten für Mitarbeiter am Fließband, ein 3PL-Dienstleister erzeugt gebrandete Packzettel im Namen von mehreren Händlern mit unterschiedlichen Logos und Rücksendeadressen.

Die Lösung: Druckfertige PDF-Dateien, Direkt aus Auftragsdaten Mit Der IronPDF-Bibliothek Generiert

IronPDF lässt das .NET OMS druckfertige PDF Packzettel und Etiketten direkt aus Auftragsdaten erstellen. Wenn ein Auftrag in die Phase "bereit zum Packen" eintritt, ruft die Anwendung Einzelposten, Lieferadresse, Transportinformationen und spezielle Anweisungen ab, füllt eine HTML-Vorlage aus, die für das Zielpapierformat dimensioniert ist, und ChromePdfRenderer erzeugt das PDF.

Das Lagerpersonal druckt das Ergebnis auf jedem Standard- oder Thermodrucker aus, ein Dokument pro Auftrag oder ein Batch-Mehrseiten-PDF, das eine gesamte Kommissionierwelle in einem einzigen Druckauftrag abdeckt. Es gibt keine proprietäre Etikettensoftware zu installieren, keinen manuellen Dateneingabeschritt und keine pro Etikett-API-Gebühr. Das Rendering läuft innerhalb der vorhandenen .NET-Anwendung als einzelnes NuGet-Paket ohne externe Prozesse.

Wie es in der Praxis funktioniert

1. Aufträge betreten die Verpackungsschlange

Ein Auftrag wechselt entweder automatisch nach Zahlungsbestätigung oder wenn ein Lagerleiter eine Kommissionierungswelle vom OMS freigibt, in den Status "bereit zum Packen". Die Anwendung fragt die Auftragsdatenbank für jeden Auftrag im Batch ab, Einzelposten mit SKU, Produktname und Menge; Versandadresse; Transportdienst und Servicelevel; vorab zugewiesene Sendungsnummer, wenn verfügbar; und alle speziellen Handhabungsanweisungen oder Geschenkmitteilungen.

Jeder Auftrag in der Welle erhält sein eigenes PDF, das aus derselben HTML-Vorlage generiert und mit seinen spezifischen Daten gefüllt wird. Für eine Welle von 200 Aufträgen sind das 200 Renderings — jedes nimmt Millisekunden in Anspruch — bevor die Ergebnisse zu einem einzigen Dokument für den Druckauftrag zusammengeführt werden.

2. Vorlagen behandeln beide Formattypen

Die Packzettelvorlage (Brief oder A4) enthält eine Positionstabelle mit Kontrollkästchen für den Verpacker, um jeden Artikel zu überprüfen, die Auftragsnummer, die Lieferadresse und eine scannbare Auftrags-ID. Die Etikettenvorlage richtet sich auf 4×6 Zoll (das standardmäßige thermische Etikettenformat) und enthält die Liefer- und Rücksendeadresse, den Frachtbarkeit Bereich und das Versandgewicht.

Beide Vorlagen sind HTML- und CSS-Dateien, die im Besitz des Anwendungsteams sind. Eine Aktualisierung des Packzettels zur Ergänzung einer neuen Spalte, Änderung eines Händlerlogos auf einem 3PL-Paket oder Anpassung von Etikettenmargen für ein neues Thermodruckermodell ist eine Änderung der Vorlagendatei, keine Neukompilierung, keine erneute Bereitstellung der Geschäftsdaten.

Beispiel einer HTML-Dateivorlage

Pdf Packing Slips Shipping Labels 2 related to Beispiel einer HTML-Dateivorlage

3. Batch gerendert und in einen Druckauftrag zusammengeführt

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter;

renderer.RenderingOptions.MarginTop = 10;

renderer.RenderingOptions.MarginBottom = 10;

string slipTemplate = await File.ReadAllTextAsync("Templates/packing-slip.html");

var slipPdfs = new List<PdfDocument>();

foreach (var order in pickWave)
{
    string lineItemRows = string.Concat(order.Items.Select(i =>
        $"<tr><td><input type='checkbox'></td><td>{i.Sku}</td><td>{i.ProductName}</td><td>{i.Quantity}</td></tr>"));

    string html = slipTemplate
        .Replace("{{OrderNumber}}", order.OrderNumber)
        .Replace("{{ShipTo}}", order.ShippingAddress.Formatted)
        .Replace("{{LineItems}}", lineItemRows)
        .Replace("{{SpecialInstructions}}", order.SpecialInstructions ?? "None");

    slipPdfs.Add(renderer.RenderHtmlAsPdf(html));
}

PdfDocument waveBatch = PdfDocument.Merge(slipPdfs);

waveBatch.SaveAs($"wave-{pickWave.WaveId}-slips.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter;

renderer.RenderingOptions.MarginTop = 10;

renderer.RenderingOptions.MarginBottom = 10;

string slipTemplate = await File.ReadAllTextAsync("Templates/packing-slip.html");

var slipPdfs = new List<PdfDocument>();

foreach (var order in pickWave)
{
    string lineItemRows = string.Concat(order.Items.Select(i =>
        $"<tr><td><input type='checkbox'></td><td>{i.Sku}</td><td>{i.ProductName}</td><td>{i.Quantity}</td></tr>"));

    string html = slipTemplate
        .Replace("{{OrderNumber}}", order.OrderNumber)
        .Replace("{{ShipTo}}", order.ShippingAddress.Formatted)
        .Replace("{{LineItems}}", lineItemRows)
        .Replace("{{SpecialInstructions}}", order.SpecialInstructions ?? "None");

    slipPdfs.Add(renderer.RenderHtmlAsPdf(html));
}

PdfDocument waveBatch = PdfDocument.Merge(slipPdfs);

waveBatch.SaveAs($"wave-{pickWave.WaveId}-slips.pdf");
Imports IronPdf
Imports System.IO

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter

renderer.RenderingOptions.MarginTop = 10

renderer.RenderingOptions.MarginBottom = 10

Dim slipTemplate As String = Await File.ReadAllTextAsync("Templates/packing-slip.html")

Dim slipPdfs As New List(Of PdfDocument)()

For Each order In pickWave
    Dim lineItemRows As String = String.Concat(order.Items.Select(Function(i) $"<tr><td><input type='checkbox'></td><td>{i.Sku}</td><td>{i.ProductName}</td><td>{i.Quantity}</td></tr>"))

    Dim html As String = slipTemplate _
        .Replace("{{OrderNumber}}", order.OrderNumber) _
        .Replace("{{ShipTo}}", order.ShippingAddress.Formatted) _
        .Replace("{{LineItems}}", lineItemRows) _
        .Replace("{{SpecialInstructions}}", If(order.SpecialInstructions, "None"))

    slipPdfs.Add(renderer.RenderHtmlAsPdf(html))
Next

Dim waveBatch As PdfDocument = PdfDocument.Merge(slipPdfs)

waveBatch.SaveAs($"wave-{pickWave.WaveId}-slips.pdf")
$vbLabelText   $csharpLabel

Beispiel-Ausgabe-PDF-Dokument

IronPDF-Beispielausgabe PdfDocument.Merge() kombiniert jeden einzelnen Schein in ein einziges mehrseitiges PDF. Das Lagerteam sendet einen Druckauftrag für die gesamte Welle, einen Klick an einem Arbeitsplatz, ein Ausgabefach zum Abholen.

4. Etikettengrößen über Rendering-Optionen festgelegt

using IronPdf;

var renderer = new ChromePdfRenderer();

// 4x6 inch thermal label — 288 x 432 points
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Custom;
renderer.RenderingOptions.CustomPaperWidth = 4;
renderer.RenderingOptions.CustomPaperHeight = 6;
renderer.RenderingOptions.MarginTop = 0;
renderer.RenderingOptions.MarginBottom = 0;
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.MarginRight = 0;

string labelHtml = $@"
    <div style='font-family:monospace; padding:4px;'>
        <p><strong>SHIP TO:</strong><br/>{order.ShippingAddress.Formatted}</p>
        <p><strong>FROM:</strong><br/>{order.ReturnAddress.Formatted}</p>
        <p>Order: {order.OrderNumber} | Weight: {order.WeightLbs:F1} lbs</p>
        <p>Carrier: {order.CarrierName} — {order.ServiceLevel}</p>
    </div>";

PdfDocument label = renderer.RenderHtmlAsPdf(labelHtml);

label.SaveAs($"label-{order.OrderNumber}.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// 4x6 inch thermal label — 288 x 432 points
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Custom;
renderer.RenderingOptions.CustomPaperWidth = 4;
renderer.RenderingOptions.CustomPaperHeight = 6;
renderer.RenderingOptions.MarginTop = 0;
renderer.RenderingOptions.MarginBottom = 0;
renderer.RenderingOptions.MarginLeft = 0;
renderer.RenderingOptions.MarginRight = 0;

string labelHtml = $@"
    <div style='font-family:monospace; padding:4px;'>
        <p><strong>SHIP TO:</strong><br/>{order.ShippingAddress.Formatted}</p>
        <p><strong>FROM:</strong><br/>{order.ReturnAddress.Formatted}</p>
        <p>Order: {order.OrderNumber} | Weight: {order.WeightLbs:F1} lbs</p>
        <p>Carrier: {order.CarrierName} — {order.ServiceLevel}</p>
    </div>";

PdfDocument label = renderer.RenderHtmlAsPdf(labelHtml);

label.SaveAs($"label-{order.OrderNumber}.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' 4x6 inch thermal label — 288 x 432 points
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Custom
renderer.RenderingOptions.CustomPaperWidth = 4
renderer.RenderingOptions.CustomPaperHeight = 6
renderer.RenderingOptions.MarginTop = 0
renderer.RenderingOptions.MarginBottom = 0
renderer.RenderingOptions.MarginLeft = 0
renderer.RenderingOptions.MarginRight = 0

Dim labelHtml As String = $"
    <div style='font-family:monospace; padding:4px;'>
        <p><strong>SHIP TO:</strong><br/>{order.ShippingAddress.Formatted}</p>
        <p><strong>FROM:</strong><br/>{order.ReturnAddress.Formatted}</p>
        <p>Order: {order.OrderNumber} | Weight: {order.WeightLbs:F1} lbs</p>
        <p>Carrier: {order.CarrierName} — {order.ServiceLevel}</p>
    </div>"

Dim label As PdfDocument = renderer.RenderHtmlAsPdf(labelHtml)

label.SaveAs($"label-{order.OrderNumber}.pdf")
$vbLabelText   $csharpLabel

Beispielausgabe-PDF-Datei und Versandetikett

Beispiel eines generierten Lieferscheins und Versandetiketts Nullmargen erlauben es, dass CSS den gesamten Abstand bis zur Etikettenkante steuert, was entscheidend für thermische Etikettenformate ist, bei denen der Frachtbarkeit-Bereich innerhalb weniger Millimeter zur Papiergrenze reichen muss.

Nutzen in der realen Welt

Batch-Effizienz. Eine gesamte Kommissionierwelle in ein PDF zusammengeführt bedeutet einen Druckauftrag anstelle von Hunderten. Die Zeit zum Schichtbeginn sinkt, wenn das Lagerpersonal nicht auf individuelle Druckdialogfelder warten muss, die pro Auftrag geladen werden.

Druckkompatibilität. PDF wird konsistent auf Laser-, Tintenstrahl- und Thermodruckern gerendert, ohne dass proprietäre Treiber oder Etikettensoftware auf Arbeitsplatzrechnern im Lager installiert werden müssen. Das Format, das das OMS erzeugt, ist das Format, das jeder Drucker auf dem Boden akzeptiert.

Genauigkeit. Einzelposten und Adressen werden direkt aus dem Auftragsdatensatz gezogen. Es gibt keinen manuellen Transkriptionsschritt und keinen Weg, dass eine Adresse oder ein SKU vor Erreichen des Verpackers fehlerhaft eingegeben wird.

Flexible Formate. Dieselbe Generierungspipeline erzeugt Packzettel im Brief-Format und 4×6 Etiketten durch Wechseln der HTML-Vorlage und der Seitengrößenoptionen. Kein separates Tool, keine separate Integration.

Mandantenfähiges Branding. 3PL-Anbieter füllen eine merchantId-Variable im Vorlagenpfad aus und laden eine händlerspezifische HTML-Datei, jedes Kunden-Paket trägt sein eigenes Logo, Rücksendeadresse und Markenfarben durch dieselbe Pipeline, ohne zusätzliche Logik.

Keine Kosten pro Etikett. Das Rendering erfolgt prozessintern. Es gibt keinen Drittanbieter-Etiketten-API-Aufruf pro Druck, keine Nutzungszuteilung und kein Preismodell, das eine schichtweise höhere Auslastung kostspieliger macht als eine geringe.

Abschluss

Der Kommissionier-Verpack-Versand-Zyklus ist ein Durchsatzproblem. Jeder manuelle Schritt zwischen dem Moment, in dem ein Auftrag in die Verpackungsschlange eintritt, und einer gekennzeichneten Box, die das Lager verlässt, ist eine Einschränkung, und die Generierung von Packzetteln und Etiketten ist eine, die sich innerhalb des OMS selbst leicht automatisieren lässt.

Eine HTML-Vorlage pro Format, ein Rendervorgang pro Auftrag, ein zusammengeführtes PDF pro Welle, ein Druckauftrag pro Schicht. IronPDF übernimmt den vollständigen HTML-Erzeugung-Lebenszyklus von PDF in C# auf ironpdf.com, vom Rendern von HTML-Vorlagen bis zum Zusammenführen, Speichern und Streamen von Dokumenten. Wenn Sie bereit sind, die Pipeline mit Ihren eigenen Auftragsdaten und Ihrem Druck-Setup zu testen, starten Sie Ihre kostenlose 30-Tage-Testversion und lassen Sie einen funktionierenden Batch-Slip-Generator vor Ablauf der Woche laufen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an