PDF-Druck nur erste Seite über Spool

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

PDF-Druck nur erste Seite über Spool

Beitrag von IHe (Specialist / 155 / 38 / 49 ) »
Hallo zusammen,

ich habe folgende Anforderung: Gegeben ist ein bereits existierendes PDF-Dokument, welches nicht innerhalb SAP erzeugt wurde. Dieses liegt als XSTRING vor. Ich möchte dieses nun ausdrucken und verwende dafür die RSPO-FuBas. Da die Druckfunktion auch in der Private Cloud funktionieren soll entfällt die Option mittels Dateiablage und Druck über ADS. Der Spooldruck funktioniert auch grundsätzlich, es ist aber nicht möglich zu definieren, dass nur die erste Seite gedruckt werden soll. Hier mal ein Beispiel-Coding mit Parameter iv_pdf vom Typ xstring:

Code: Alles auswählen.

    DATA: lv_dest         TYPE sypri_pdest,
          lv_spool_handle TYPE i,
          lv_spoolid      TYPE tsp01-rqident,
          lt_bin          TYPE TABLE OF rspolpbi.

    DATA(lv_filesize) = xstrlen( iv_pdf ).
    DATA(lv_pages)    = get_number_of_pages( iv_pdf ).

    lv_dest = p_dest.
    CALL FUNCTION 'RSPO_SR_OPEN'
      EXPORTING
        dest            = lv_dest
        layout          = 'G_RAW'
        suffix1         = 'PDF'
        suffix2         = sy-uname
        immediate_print = abap_false
        auto_delete     = abap_true
        doctype         = 'BIN'
      IMPORTING
        handle          = lv_spool_handle
        spoolid         = lv_spoolid
      EXCEPTIONS
        OTHERS          = 1.
    IF sy-subrc <> 0.
      "Errorhandling
    ENDIF.

    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer     = iv_pdf
      TABLES
        binary_tab = lt_bin.

    CALL FUNCTION 'RSPO_SR_TABLE_WRITE_BINARY'
      EXPORTING
        handle           = lv_spool_handle
        total            = lv_filesize
      TABLES
        lines            = lt_bin
      EXCEPTIONS
        handle_not_valid = 1
        operation_failed = 2
        OTHERS           = 3.
    IF sy-subrc <> 0.
      "Errorhandling
    ENDIF.

    lv_pages = 1. "Zu Testzwecken

    CALL FUNCTION 'RSPO_SR_CLOSE'
      EXPORTING
        handle           = lv_spool_handle
        final            = abap_true
      EXCEPTIONS
        handle_not_valid = 1
        operation_failed = 2
        OTHERS           = 3.
    IF sy-subrc <> 0.
      "Errorhandling
    ENDIF.

    CALL FUNCTION 'RSPO_OUTPUT_SPOOL_REQUEST'
      EXPORTING
*       COPIES                   = 0
        device                   = lv_dest
*       DIVISION                 = '*'
        endpage                  = lv_pages
*       PRIO                     = 0
*       RECEIVER                 = '*'
*       REQEST_TITLE             = '*'
        spool_request_id         = lv_spoolid
        startpage                = 1
*       TELELAN                  = '*'
*       TELENUM                  = '*'
*       POSNAME                  =
*       ACTTIME                  =
      EXCEPTIONS
        archive_dest_invalid     = 1
        archive_dest_not_found   = 2
        archive_dest_no_right    = 3
        cannot_archive           = 4
        change_archdest_no_right = 5
        change_copies_no_right   = 6
        change_dest_no_right     = 7
        change_devtype_no_right  = 8
        change_prio_no_right     = 9
        change_telenum_no_right  = 10
        change_title_no_right    = 11
        dest_invalid             = 12
        dest_not_found           = 13
        dest_no_right            = 14
        internal_problem         = 15
        invalid_fax_attribute    = 16
        invalid_parameters       = 17
        non_owner_no_right       = 18
        no_layout                = 19
        no_spool_request         = 20
        out_again_no_right       = 21
        spooler_problem          = 22
        in_process               = 23
        OTHERS                   = 24.
    IF sy-subrc <> 0.
      "Errorhandling
    ENDIF.
Alternativ kann man auch im RSPO_SR_OPEN den Parameter immediate_print = abap_true setzen und im RSPO_SR_CLOSE die Anzahl Seiten übergeben - das hat aber ebenfalls nicht den gewünschten Effekt.

Hat jemand eine Idee oder Erfahrungen damit?
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: PDF-Druck nur erste Seite über Spool

Beitrag von IHe (Specialist / 155 / 38 / 49 ) »
Lässt sich alternativ ein PDF mit ABAP-Boardmitteln splitten und somit z.B. aus einem 2-Seiten-PDF zwei 1-Seiten-PDFs erstellen?
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: PDF-Druck nur erste Seite über Spool

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
PDF ist anscheinend nicht ganz ohne. Einfach splitten geht m.W. nicht. Wir haben ähnliche Probleme mit der Steuerung/ Druck. Wir möchten Dokumente größer als A4 in A3 drucken bzw. andersherum und ggfs. noch drehen. Wir nutzen eine Lösung mit Ghostscript. Das funktioniert, ist aber nicht wirklich "schön" bzw. robust.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
IHe


Re: PDF-Druck nur erste Seite über Spool

Beitrag von IHe (Specialist / 155 / 38 / 49 ) »
Genau von solchen OS-Scripten wollen wir weg. Das mag momentan noch etwas dreckig gehen, aber nach einer Migration in die Private Cloud sind alle OS-bezogenen Aktionen nicht erlaubt und auch vorher schon will man Cloud-kompatibel sein. Ich hätte vermutet, dass ein SAP-System automatisiert externe Dokumente ausdrucken kann - inklusive von Druckoptionen wie Seite x bis y. Anscheinend kann dies aber nur ein Anwender im Dialogmodus mit Zuhilfenahme von lokalen PDF-Viewern.
Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: PDF-Druck nur erste Seite über Spool

Beitrag von whaslbeck (ForumUser / 75 / 18 / 10 ) »
Hallo,

naja, in der private Cloud hast du (bzw. die zuständige Basis) in der Regel Zugriff auf das Eisen. Da ist es technisch kein Problem auf OS Kommandos zurückzugreifen. Anders natürlich in der public Cloud.

Was du dann machen kannst: bau dir einen Server der die üblichen PDF Operationen (split, concat, resize, Wasserzeichen reinbauen, was immer ihr braucht...) erledigt und über einen Webservice (mit einer API die deinen Anforderungen entgegenkommt) exponiert. Ist nicht so schwer. Entweder du baust einen Wrapper (in Python, Go, Java, PHP, was immer dir liegt) um die üblichen PDF Tools wie pdftk, ghostscript oder du nimmst sowas wie Apache PDFBox (dann bist du halt auf Java festgenagelt).
Den wirfst du dann am besten in ein internes Netz, auf dem nur die Application Server draufkommen. Dann baust du dir in ABAP noch eine Klasse, die das WebAPI wegabstrahiert, und du hast gewonnen.

Alternativ kannst du $$$ ausgeben und einen fertigen Dienst nutzen, der sowas macht. Z.b. sowas: https://developer.adobe.com/document-se ... vices-api/ (nie benutzt...)

Wenn du sehhhhr viel Zeit hast, kannst du natürlich auch einen PDF Parser/Generator in ABAP bauen. Ist sicher nicht unmöglich. Das Format ist gut dokumentiert und es gibt viel Code in anderen Sprachen.


Ja, das ist alles nicht sooo schön. Evtl. kann man auch über das Customer Influence Programm SAP mitteilen, das es an dieser Stelle Handlungsbedarf gibt ;-)

Folgende Benutzer bedankten sich beim Autor whaslbeck für den Beitrag:
IHe


Seite 1 von 1

Vergleichbare Themen

1
Antw.
1568
Views
Spaltenüberschrift nur für erste Seite
von dyv » 08.09.2014 11:57 • Verfasst in ABAP® für Anfänger
1
Antw.
1953
Views
CL_GUI_ALV_TREE_SIMPLE - Blättern auf erste Seite
von thah » 04.05.2007 10:36 • Verfasst in ABAP® Core
0
Antw.
1525
Views
Smartforms erste Seite nicht drucken
von mari » 26.10.2007 14:11 • Verfasst in ABAP® Core
3
Antw.
3365
Views
Spool mit RSPO_RETURN_ABAP_SPOOLJOB auslesen -> nur 1. Seite
von essence » 02.09.2013 14:39 • Verfasst in ABAP® Core
2
Antw.
1352
Views
SAPSCRIPT: Seite zum Druck vorgeben
von Thomas17 » 06.05.2014 10:02 • Verfasst in ABAP® Core

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2040
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 3869