PDF in einer Tabelle anzeigen

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

PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Hallo allerseits,

ich bin neu hier und beschäftige mich seit geraumer Zeit mit Abap^^.

Jetzt würde ich gerne folgendes bewerkstelligen:

In einer Tabelle auf einer SQL Datenbank ist u.a. eine Spalte mit BLOB Dateien (nur im PDF Format).
Jetzt würde ich diese Tabellen auch gerne in einem ABAP Report anzeigen lassen.
Der Report soll die Tabelle(n) nur anzeigen, nirgendwo speichern oder modifizieren. Bis auf die Spalte mit der BLOB Datei klappt alles wunderbar.

Zur Zeit lade ich das PDF in einen Arbeitsbereich mit zugehöriger interne Tabelle vom Typ xstring.
Was mir fehlt ist eine Möglichkeit die Daten in einem PDF oder alternativ einen (lesbaren) Text darzustellen.

Über einen Ansatz wär ich sehr dankbar.

LG
sebo

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


Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Soviel ich weiß, wird das im Standard über den CL_GUI_HTML_VIEWER realisiert.
Dahinter steht ja der IE und der kann den Daten-Inhalt ensprechend interpretieren.

Alternativ gibts noch die XPDF-Library mit der man PDF relativ sauber in eine Textdarstellung umwandeln kann.
Muss aber auf den Appl.Servern installiert, oder als WebService (auf einem eigenen Server) eingebunden werden.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF in einer Tabelle anzeigen

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

hier gibts ein Beispiel dazu:

http://www.tricktresor.de/content/index ... &navID=601

Gruß
Wolfgang

Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!
Falls man das PDF nicht als Datei auf den Client übertragen will (Probleme mit Downloadverz. usw.) kann man alternativ den Dataprovider verweden.
CL_GUI_HTML_VIEWER=>LOAD_DATA

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Danke für die schnellen Antworten.

Ja die Datei soll nicht abgespeichert werden, sondern nur angezeigt.

In sämtlichen Beispielen, wie dem auf Tricktresor werden ja Pfade angegeben in der das PDF gespeichert ist.
In meinem Fall ist das Dokument ja in einer SQL-Datenbanktabelle gespeichert, wie oben schon erwähnt selektiere ich die entsprechende Spalte in einen Feld vom typ xstring. Das Ganze schreibt mir dann in das entsprechenede Feld auf dem Dynpro logischerweise einen hexadezimalen Code.
Da ich zugegebener Maßen mit objektorientierten Programmieren noch ein bisschen hinterher hänge,ist mir jetzt nicht ganz klar wie ich mit den genannten Mitteln das ganze Konstrukt nun in ein lesbares PDF verzaubern kann.

LG
sebo

Re: PDF in einer Tabelle anzeigen

Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
Ich würde mal die Methode LOAD_DATA von cl_gui_html_viewer ausprobieren.

Code: Alles auswählen.

  call method o_html_control->load_data
       exporting
            type         = 'text' "???
            subtype      = 'pdf'  "???
       importing
            assigned_url = l_url
       changing
            data_table   = lt_data
       exceptions
            others       = 1.

mit anschliessendem SHOW_URL( l_url ).

Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Wie du aus einem XSTRING eine Tabelle für den DataProvider machen kannst, hab ich hier schon mal gepostet.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Also das mit der Typkonvertierung funktioniert nicht.

..sieht bei mir so aus:

Code: Alles auswählen.

data: wa_vlilog_blob type xstring.

data: it_vlilog_blob TYPE STANDARD TABLE OF bin1024 WITH DEFAULT KEY.

FIELD-SYMBOLS <vlilog_blob_data> type bin1024.


... 

REFRESH it_vlilog_blob.

WHILE wa_vlilog_blob IS NOT INITIAL.
    APPEND INITIAL LINE TO it_vlilog_blob ASSIGNING <vlilog_blob_data>.
    <vlilog_blob_data> = wa_vlilog_blob.
    SHIFT wa_vlilog_blob BY 1024 PLACES LEFT IN BYTE MODE.
    endwhile.

CREATE OBJECT html_control
    EXPORTING
      parent = ctl_container_blob.

call method html_control->load_data
       exporting
            type         = 'application'
            subtype      = 'pdf'
       importing
            assigned_url = wa_vlilog_blob
       changing
            data_table   = it_vlilog_blob
       exceptions
            others       = 1.

CALL METHOD html_control->show_url
    EXPORTING
      url = wa_vlilog_blob.
ich wünsche ein schönes Wochenende:)

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Nach langem herumprobieren komm ich leider immer noch auf kein Ergebnis.

Load_Data bzw. Show_URL brauchen ja eine Eingabe vom Typ C und ich liefer den einen xstring, soviel ist klar, deswegen das Umwandeln. Auch bei der Umwandlung in bin1024 meckert der.

Was mich ein wenig stutzig macht ist, dass mein Programm ja die komplette PDF aus der SQL Datenbank in einen Arbeitsbereich liest.
Braucht Load_Data/Show_URL nicht eigentlich einen Dateipfad, oder habe ich da was falsch verstanden?

LG
sebo

Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Mit LOAD_DATA machst du ja aus deinen Daten eine URL.
SAP schickt hier im Hintergrund eine Datei an den Rechner die im TEMP-Verzeichnis abgelegt wird.

Hier die Korrektur, dann sollte es funktionieren

Code: Alles auswählen.

data: wa_vlilog_blob type xstring,
      ld_url type urlink.

data: it_vlilog_blob TYPE STANDARD TABLE OF bin1024 WITH DEFAULT KEY.

FIELD-SYMBOLS <vlilog_blob_data> type bin1024.

REFRESH it_vlilog_blob.

WHILE wa_vlilog_blob IS NOT INITIAL.
    APPEND INITIAL LINE TO it_vlilog_blob ASSIGNING <vlilog_blob_data>.
    <vlilog_blob_data> = wa_vlilog_blob.
    SHIFT wa_vlilog_blob BY 1024 PLACES LEFT IN BYTE MODE.
endwhile.

CREATE OBJECT html_control
    EXPORTING
      parent = ctl_container_blob.

call method html_control->load_data
       exporting
            type         = 'application'
            subtype      = 'pdf'
       importing
            assigned_url = ld_url
       changing
            data_table   = it_vlilog_blob
       exceptions
            others       = 1.

CALL METHOD html_control->show_url
    EXPORTING
      url = ld_url.
LOAD_DATA und SHOW_URL können nichts mit XSTRING anfangen. Die brauchen natürlich eine Textvariable für den Pfad. Der Einfachheit halber hab ich URLINK verwendet. Das gibts im Standard und sollte mit seiner Länge auch ausreichend sein.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
sebo

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Vielen Dank!

Allerdings bekomme ich eine seltsame Nachricht von Adobe Reader... wenn ich da noch etwas Unterstützung bekommen könnte...

"Datei beginnt nicht mit "%PDF-" danach folgt der Dateipfad.

Desweiteren bekomm ich immer einen Kurzdump Wenn ich das Ganze in ein Grid schreiben will aufGrund eines Typkonfliktes in der Methode Toolbar_init.
Quelltyp: "\Class=CL_ABAP_ELEMDESCR"
Zieltyp: "\Class=CL_ABAP_STRUCTDESCR"

Ist aber ned so wichtig, die PDF Dateien müssen nicht zwangsläufig in eine Tabelle.

LG
sebo

Edit:
Kann das sein, dass xstring zu klein ist? Wenn ich den ursprünglichen Datensatz mit dem Arbeitsbereich vergleiche, stehen im Datensatz ~3 Mio Zeichen, in der urprünglichen Datei ~10 Mio.

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Hier mal der komplette Code:

Code: Alles auswählen.

DATA: okcode TYPE  sy-ucomm.


DATA: wa_vlilog_blob TYPE xstring.

DATA:   ld_url type urlink.

DATA: it_vlilog_blob TYPE STANDARD TABLE OF bin1024 WITH DEFAULT KEY.

FIELD-SYMBOLS <vlilog_blob_data> TYPE bin1024.

DATA:
ctl_container_blob TYPE REF TO cl_gui_custom_container,
html_control TYPE REF TO cl_gui_html_viewer.

DATA: dbs TYPE dbcon-con_name VALUE 'MAXDB1'.

START-OF-SELECTION.
*-- Definition Klasse

  CLASS cl_gui_cfw DEFINITION LOAD.
  IF ctl_container_blob IS INITIAL.
    CREATE OBJECT ctl_container_blob
      EXPORTING
        container_name = 'CONTAINER_BLOB'.

    CREATE OBJECT html_control
    EXPORTING
      parent = ctl_container_blob.
  ENDIF.

  TRY.
      EXEC SQL.
        connect to :dbs
      ENDEXEC.
    CATCH  cx_sy_native_sql_error.
  ENDTRY.

  TRY.
      EXEC SQL performing show.
        select blob
        from extstu.vli_log
        into  :wa_vlilog_blob
       ENDEXEC.
   CATCH cx_sy_native_sql_error.
  ENDTRY.

  TRY.
      EXEC SQL.
        disconnect :dbs
      ENDEXEC.
    CATCH cx_sy_native_sql_error.
  ENDTRY.
"concatenate '%PDF-' wa_vlilog_blob into wa_vlilog_blob.

  CALL SCREEN 200.

*&---------------------------------------------------------------------*
*&      Form  show
*&---------------------------------------------------------------------*

FORM show.
REFRESH it_vlilog_blob.

WHILE wa_vlilog_blob IS NOT INITIAL.
    APPEND INITIAL LINE TO it_vlilog_blob  ASSIGNING <vlilog_blob_data>.
    <vlilog_blob_data> = wa_vlilog_blob.
    SHIFT wa_vlilog_blob BY 1024 PLACES LEFT IN BYTE MODE.
  ENDWHILE.

                                             .
    CALL METHOD html_control->load_data
    EXPORTING
      type         = 'application'
      subtype      = 'pdf'

    IMPORTING
      assigned_url = ld_url
    CHANGING
      data_table   = it_vlilog_blob
    EXCEPTIONS
      OTHERS       = 1.

  CALL METHOD html_control->show_url
    EXPORTING
      url = ld_url.
ENDFORM.                    "show

Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Versuch das ganze mal mit Standard OpenSQL Anweisungen umzusetzten, ich glaub da liegt der Hund begraben.

Code: Alles auswählen.

select blob
  from vli_log
  into wa_vlilog_blob.
  perform show.
endselect.
Möglich das EXEC SQL PERFORMING je Datenblock (je Datenbankserver unterschiedlich) und nicht je Ergebniszeile ausgeführt wird.
(SAP überträgt die Daten als Block und eine besonders lange Ergebniszeile könnte in mehreren Blöcke übertragen werden)
Oder schau dir vor dem "zerstückeln" in die interne Tabelle den Inhalt von wa_vlilog_blob im Debugger an.
Wenn da schon das "%PDF" fehlt wurden die Daten falsch abgelegt.

XSTRING hat eine "theoretische" Größenbeschänkung von glaub ich 1GB oder so. Das kanns sicher nicht sein!

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
sebo

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: PDF in einer Tabelle anzeigen

Beitrag von sebo (ForumUser / 10 / 3 / 0 ) »
Danke dir für deine Hilfe und Geduld!


In der Tat liegt es daran, dass Access das PDF anders ablegt, als wenn ich es direkt in der MaxDB einpflege (wo es ABAP dann anzeigen kann, aber Access nicht mehr.... ein Teufelskreis).


Zur Zeit schneide ich alles vor %PDF- und nach %%EOF_ (wo das PDF Dokument wohl endet) ab.

Dazu konvertiere ich den xstring in ein string, suche nach den entsprechenden Schlüsselwlörten, schneide ab und konvertiere anschließen wieder nach xstring.

Dazu benutze ich die FuBars 'HR_KR_XSTRING_TO_STRING' und 'HR_KR_STRING_TO_XSTRING'

allerdings wird der Inhalt zwischen %PDF ... %%EOF_ anscheinend verändert beim konvertieren (habs mit einem direkt in Maxdb eingepflegten PDF probiert, also eines was mit %PDF etc. anfängt.


Gibt es "bessere" FuBars, die nicht den Inhalt verändern oder gar eine Möglichkeit den xstring selbst (ohne ihn zu konvertieren) auf die Zeichen zu prüfen?


Ich wünsche schon einmal frohe Ostertage
sebo

Re: PDF in einer Tabelle anzeigen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

Du könntest ja anstatt den ganzen XSTRING zu konvertieren nur die Suchwörter in XSTRING umwandeln und dann danach suchen. :shock:
Für diverse Umwandlungen nehm ich immer die CL_ABAP_CONV_IN_CE bzw CL_ABAP_CONV_OUT_CE Klassen.
Damit hatte ich bislanag keine Problem.
Möglich, dass die Bausteine die du verwendest nicht UNICODE fähig sind.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

4
Antw.
675
Views
Tabelle anzeigen mit FuBa?
von Nion » 31.03.2023 08:51 • Verfasst in ABAP® für Anfänger
5
Antw.
4711
Views
Image aus DB-Tabelle in WDA anzeigen
von Thanatos82 » 26.04.2013 11:55 • Verfasst in Web-Dynpro, BSP + BHTML
5
Antw.
2898
Views
Interne Tabelle dynamisch anzeigen
von Embryo » 24.01.2013 10:38 • Verfasst in ABAP® für Anfänger
12
Antw.
3314
Views
Alle internen Tabelle anzeigen
von Paul » 03.07.2018 13:45 • Verfasst in ABAP® für Anfänger
2
Antw.
2208
Views
Inhalt der Internen Tabelle in einem Screen anzeigen.
von annaarnst » 06.08.2008 11:16 • 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

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742