PDF Formulare füllen
Dieses Skript zeigt, wie ein fertiges PDF-Formular mit Daten aus cobra befüllt werden kann.
Es wird hier exemplarisch das Fahrgastreklamationsformular der Deutschen Bahn befüllt.
Stolpersteine
-
Es ist nicht immer ganz leicht rauszukriegen wie die Formularfelder heißen. Dazu bietet sich im Zweifel ein Adobe Acrobat Pro oder Foxit PDF Creater an.
-
Die Werte bei Checkboxen und Radiobuttons, die gesetzt werden müssen sind leider nicht immer intuitiv von den PDF-Autoren gewählt. Um die Werte auszulesen bietet sich an die Werte einmal im Ausgangs-PDF zu setzen und dann via MessageBox anzuzeigen.
Skript
// Version 5
namespace Ruthardt.PrintPlus.Skripting
{
using System;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using DevExpress.Pdf;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.CobraFramework.Ado;
using Ruthardt.PrintPlus.Export.Context;
using Ruthardt.PrintPlus.Model.Interfaces;
public class ExampleScript : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
var pdfQuelle = @"C:\Users\vm\Desktop\fahrgastrechteformular.pdf";
var pdfZiel = @"C:\Users\vm\Desktop\fahrgastrechteformular_ausgefüllt.pdf";
var a = currentContext.ParentDataByPrefix["A"];
var f = currentContext.Data;
using (PdfDocumentProcessor processor = new PdfDocumentProcessor())
{
processor.LoadDocument(pdfQuelle);
PdfFormData data = processor.GetFormData();
data["S1F1"].Value = f.GetDateValue("Reisedatum").ToString("dd");
data["S1F2"].Value = f.GetDateValue("Reisedatum").ToString("MM");
data["S1F3"].Value = f.GetDateValue("Reisedatum").ToString("yy");
data["S1F4"].Value = f.GetStringValue("Startbahnhof");
data["S1F7"].Value = f.GetStringValue("Zielbahnhof");
// *** Checkbox
// MessageBox.Show(data["S1F21"].Value.ToString());
data["S1F21"].Value = f.GetBoolValue("Anschlusszug verpasst") ? "Ja" : "Off";
data["S1F22"].Value = f.GetStringValue("Anschlusszug verpasst am Bahnhof");
// *** Radiobutton
// MessageBox.Show(data["S1F29"].Value.ToString());
var art = f.GetStringValue("Auszahlungsart");
switch (art)
{
case "Auszahlung":
data["S1F29"].Value = "Auszahlung oder Überweisung";
break;
case "Gutschein":
data["S1F29"].Value = "Gutschein";
break;
}
data["S2F3"].Value = a.GetStringValue("Firma1");
data["S2F4"].Value = a.GetStringValue("Nachname");
data["S2F5"].Value = a.GetStringValue("Vorname");
processor.ApplyFormData(data);
processor.SaveDocument(pdfZiel);
Process.Start(pdfZiel);
}
}
}
}