+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

ACTION zu PDF hinzufügen


(Stefan Kriebitzsch) #1

Hallo combit Team,

ich möchte gern ein PDF über den Browser ausdrucken. Hierfür ist es notwendig eine ACTION, welche beim Öffnen eines PDF ausgeführt wird, zu erstellen. Eine so genannte OPENACTION.
Wie kann dies beim Erstellen eines PDF aus einem Report auf einem Server (also ohne Userinteraktion) mit List&Label gemacht werden?

Beispiel automatische Navigation zu einer Webseite beim Öffnen eines PDFs:
/TYPE /ACTION
/S /URI
/URI (http://www.combit.net)

Mit freundlichen Grüßen
Stefan Kriebitzsch


(Felix Meedt) #2

Hallo,
das Ganze habe ich mit PdfSharp gelöst.
Zuerst gibt man den Export als Stream aus.
Danach kann man diesen mit PdfSharp bearbeiten.
Der Ergebnis-Stream wird dann an den Browser übergeben.

Sieht bei mir so aus:

MemoryStream pdfStream = new MemoryStream();
PrinterSettings settings = new PrinterSettings();
settings.PrinterName = "HPM3027";
settings.Copies = 1;
LlProject projType =  RepositoryItemType.ToLlProject(RepositoryHelper.GetCurrentRepository().GetItem(TemplateItemID).Type);
LL.Core.LlSetPrinterInPrinterFile(projType, TemplateItemID, LlPrinterIndex.AllPages, settings);
ExportConfiguration exportConfig = new ExportConfiguration(LlExportTarget.Pdf, pdfStream, TemplateItemID);
exportConfig.BoxType = LlBoxType.None;
exportConfig.Path = null;
exportConfig.ExportOptions.Add(LlExportOption.ExportQuiet, "1");
LL.Export(exportConfig);
PdfDocument document = new PdfDocument();
document = PdfReader.Open(pdfStream);
PdfDictionary dict = new PdfDictionary(document);
dict.Elements["/Type"] = new PdfName("/Action");
dict.Elements["/S"] = new PdfName("/Named");
dict.Elements["/N"] = new PdfName("/Print");
document.Internals.AddObject(dict);
document.Internals.Catalog.Elements["/OpenAction"] = PdfInternals.GetReference(dict);
MemoryStream outputDoc = new MemoryStream();
document.Save(outputDoc, false);
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", outputDoc.Length.ToString());
Response.BinaryWrite(outputDoc.ToArray());
Response.Flush();
outputDoc.Close();
pdfStream.Close();
Response.End();

(Stefan Kriebitzsch) #3

Vielen Dank!
Funktioniert einwandfrei.