Jochen: Mauspoition in einem Iframe-PDF ermitteln

0 51

Mauspoition in einem Iframe-PDF ermitteln

Jochen
  • html
  • javascript
  • jquery
  1. 0
    Gunnar Bittersmann
    1. 0
      Jochen
  2. 0
    Der Martin
    • html
    • javascript
    • usability
    1. 0
      Rolf B
      1. 0
        Jochen
        1. 0
          MudGuard
          1. 0
            Jochen
            1. 0
              MudGuard
        2. 0
          Raketenwilli
          1. 0
            Jochen
            1. 0
              Raketenwilli
        3. 0
          Tabellenkalk
          1. 0
            Jochen
            1. 0

              Angedachte Vorgehensweise ist oder wird womöglich unmöglich

              Raketenwilli
              • programmiertechnik
              1. 0

                Off-Topic

                Robert B.
                • offtopic
                • sprache
                1. 0
                  Der Martin
                  1. 0
                    Gunnar Bittersmann
                  2. 0
                    Robert B.
              2. 0
                Rolf B
                1. 0
                  Jochen
            2. 0
              Rolf B
              1. 0
                Jochen
                1. 0

                  PDF-LIB.js kann manches ... ABER

                  Raketenwilli
                  1. 0
                    Jochen
            3. 0
              MudGuard
              1. 0
                Jochen
              2. 0
                Jochen
                1. 0
                  Mitleser 2.0
                  1. 0
                    Jochen
                    1. 0
                      Jochen
                      1. 0
                        Mitleser 2.0
                        1. 0
                          Der Martin
                          1. 0
                            Mitleser 2.0
                            1. 0
                              Jochen
                              1. 0
                                Mitleser 2.0
                                1. 0
                                  Jochen
                                  1. 0
                                    Mitleser 2.0
                                    1. 0
                                      Jochen
                                      1. 0
                                        Mitleser 2.0
                                2. 0
                                  Rolf B
                        2. 0
                          Jochen
                          1. 0
                            Robert B.
                            1. 0
                              Jochen
                              1. 0
                                Robert B.
                                1. 0
                                  Der Martin
                                  1. 0
                                    Jochen
              3. 0
                Mitleser 2.0
                1. 0
                  MudGuard
                  1. 0
                    Mitleser 2.0
  3. 0
    JürgenB

Guten Tag,

ich binde ein PDF in einem Iframe ein und möchte mittels Mausklick die x/y-Koordinaten der Maus ermitteln.

Mein Versuch schlägt leider fehl, was mache ich falsch?

Ich nutze Jquery.

Das PDF wird mittels PDF-Viewer im Browser angezeigt.

Jochen

<div style="position:relative;overflow-y:scroll;">
<iframe id="DivID" src="http://localhost/pdf_viewer/web/viewer.html?file=639ef822a3cec.pdf" width="100%" height="11318.4px" name="PDF-Dokument22" scrolling="auto" frameborder="0">
<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen:<br /><br />
</p>
</iframe>

<script>
$(document).ready(function(){
$('#DivID').on('click', function (e) { 
  console.log('triggered')
    var x = e.clientX; 
    var y = e.clientY;
    alert ('x='+x +' y='+y);
  });
    });
   </script>
  1. @@Jochen

    Mein Versuch schlägt leider fehl, was mache ich falsch?

    Ich nutze Jquery.

    Damit hast du dir die Frage doch selbst beantwortet. 😆

    jQuery war mal gut, als es gut war. Heutzutage ist es überflüssig, weil es alles Gute aus jQuery mittlerweile in Vanilla-JavaScript gibt. (Außer man benutzt Biblotheken, die dummerweise auf jQuery basieren. Davon ist aber bei dir nichts zu erkennen.)

    $(document).ready(function(){
    $('#DivID').on('click', function (e) { 
    

    wäre einfach

    document.addEventListener('DOMContentLoaded', function () {
      document.querySelector('#DivID').addEventListener('click', function (event) {
    

    Der etwas längere Code ist keine Rechtfertigung, eine 80 kB schwere, ansonsten unnütze Bibliothek zu laden.

    Und bitte sprechende Varialen: event, nicht e.

    Wenn du Script am Ende des body notierst (was du schon wegen Performance tun solltest), brauchst du auch das document.addEventListener('DOMContentLoaded',) nicht. Bleibt übrig und mit Pfeilfunktion geschrieben:

    document.querySelector('#DivID').addEventListener('click', (event) => {
    

    Aber ich rieche da ein weiteren Fehler: die Anwendung ist nur mit der Maus bedienbar, nicht mit anderen Eingabegeräten wie Tastatur, Sprachsteuerung usw.

    Und hier noch ein Fehler:

    <iframe id="DivID" src="http://localhost/pdf_viewer/web/viewer.html?file=639ef822a3cec.pdf" width="100%" height="11318.4px" name="PDF-Dokument22" scrolling="auto" frameborder="0">
    <p>Ihr Browser kann leider keine eingebetteten Frames anzeigen:<br /><br />
    </p>
    </iframe>
    

    In den Elementinhalt des iframe-Elements gehört keine Schuldzuweisung an den Nutzer, sonder eine Alternative, um auf anderem Weg an den Inhalt zu kommen. In deinem Fall also ein Link zur PDF-Ressource:

    <iframe >
      <a href="">PDF-Dokument 22</a>
    </iframe>
    

    Zu deinem Problem mit der Mauspoition kann ich dir noch nichts sagen, weil man sich das nirgendwo ansehen kann. Du möchtest deine fragliche Seite verlinken‽

    🖖 Живіть довго і процвітайте

    --
    „Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
    — @Grantscheam auf Twitter
    1. Hallo Gunnar,

      Ich nutze Jquery.

      Damit hast du dir die Frage doch selbst beantwortet. 😆

      Ich nutze Jquery auf derselben Seite noch für eine andere Sache, daher wird es sowieso geladen. Aber ich biun auch mit Vanilla-JS einverstanden, wenn es hilft.

      Aber ich rieche da ein weiteren Fehler: die Anwendung ist nur mit der Maus bedienbar, nicht mit anderen Eingabegeräten wie Tastatur, Sprachsteuerung usw.

      Nicht schlimm. Sie ist ausschließlich für mich selber geschrieben.

      Und hier noch ein Fehler:

      In den Elementinhalt des iframe-Elements gehört keine Schuldzuweisung an den Nutzer, sonder eine Alternative, um auf anderem Weg an den Inhalt zu kommen. In deinem Fall also ein Link zur PDF-Ressource:

      Sollte auch nur für mich selber ein Hinweis sein, falls edr Browser nicht mitspielt.

      Zu deinem Problem mit der Mauspoition kann ich dir noch nichts sagen, weil man sich das nirgendwo ansehen kann. Du möchtest deine fragliche Seite verlinken‽

      Ich habe versucht, den relevanten Teil nachzubauen.
      Ob es einen Unterschied macht, ob das PDF tatsächlich selber ins Iframe geladen wird oder ein in JS nachgebautes "PDF" weiß ich noch nicht.

      Jochen

  2. Hallo Jochen,

    Ich nutze Jquery.

    über Sinn und Unsinn dieses Details hast du ja schon Hinweise bekommen.

    Das PDF wird mittels PDF-Viewer im Browser angezeigt.

    Und das bedeutet: Als Fremdinhalt, der nicht im DOM abgebildet wird.
    Im DOM wird das PDF-Dokument dann wahrscheinlich als object-Element repräsentiert, auf dessen Innereien du mit Javascript keinen Zugriff hast (oder nur über das API, das dir der verwendete PDF-Viewer[1] freundlicherweise zur Verfügung stellt).

    Nicht schlimm. Sie ist ausschließlich für mich selber geschrieben.

    Für mich wäre das ein Argument, die Benutzbarkeit per Tastatur in den Vordergrund zu stellen und die Mausbedienung eher zu vernachlässigen.

    Einen schönen Tag noch
     Martin

    --
    Falls ihr euch wundert, warum ihr zur Zeit so schlecht aus der Wohnung kommt:
    Das ist so, weil Weihnachten vor der Tür steht. 🎄 🎄 🎄

    1. In deinem eigenen Ökosystem weißt du, welcher das ist. Wenn's aber für das freie öffentliche Internet wäre, hättest du keine Ahnung, ob es Acrobat oder vielleicht doch eher Foxit ist. Oder doch etwas völlig anderes. ↩︎

    1. Hallo Martin,

      Und das bedeutet: Als Fremdinhalt, der nicht im DOM abgebildet wird.

      Und der vor allem keine Events schmeißt, sondern selber konsumiert. Der Plan, Klicks aus einem iframe im Hauptdokument empfangen zu wollen, ist zum Scheitern verurteilt.

      Eine denkbare Umgehungslösung wäre, ein transparentes div über den iframe zu legen und die clicks darin zu empfangen. Das PDF wäre damit aber der Kontrolle durch den Anwender entzogen, d.h. das geht nur bei einem einseiten Dings, das groß genug dargestellt wird. Für eine Speziallösung in einem Individualprojekt kann man sowas machen. Verallgemeinern kann man das nicht.

      Aber ob das der gedachten Absicht dient?

      Was im PDF soll da geklickt werden, Jochen?

      Rolf

      --
      sumpsi - posui - obstruxi
      1. Hallo Rolf,

        Und der vor allem keine Events schmeißt, sondern selber konsumiert. Der Plan, Klicks aus einem iframe im Hauptdokument empfangen zu wollen, ist zum Scheitern verurteilt.

        https://codepen.io/Habetuz/pen/dyZzZQJ
        https://codepen.io/Luxbit/pen/qOQyvo

        Eine denkbare Umgehungslösung wäre, ein transparentes div über den iframe zu legen und die clicks darin zu empfangen.

        Habe ich auch schon dran gedacht.

        Das PDF wäre damit aber der Kontrolle durch den Anwender entzogen, d.h. das geht nur bei einem einseiten Dings, das groß genug dargestellt wird.

        Das stimmt so nicht. Ich kann die Größe des benötigten transparenten DIV näherungsweise ausmessen, indem ich die Seitenanzahl des PDF ausmesse.

        Was im PDF soll da geklickt werden, Jochen?

        Damit kommen wir zur nächsten möglichen Lösung.
        Eigentlich muss ich nur wissen, wann das PDF zuende ist. Weil ich an das PDF einfach nocht etwas Text anhängen will.

        Dachte, ich könnte das eventuell mit dem PDFParser machen, aber auch das ist nmicht so ganz einfach. Mit dem könnte ich womöglich die "tiefsten Koordinaten" der letzten Seite des PDF ermittel, da bin ich noch nicht so ganz im Thema.

        Für Vorschläge, wie ich messen kann, wo das PDF zuende ist, bin ich gerne zu haben. Auch, wenn ich das selber anklicken müßte (meine erste Idee), würde es ausreichen.

        Jochen

        1. Hi,

          Weil ich an das PDF einfach nocht etwas Text anhängen will.

          Dachte, ich könnte das eventuell mit dem PDFParser machen,

          hm. "Text anhängen" und "Parser" widerspricht sich doch etwas …

          Und: Wenn Du Text anhängen willst (das impliziert für mich: am Ende, denn sonst wäre es ja "einfügen"), wozu brauchst Du dann die Klick-Position?

          Das Anhängen wirst Du doch auch eher serverseitig per PHP machen, nicht clientseitig per Javascript …

          cu,
          Andreas a/k/a MudGuard

          1. Hallo Andreas,

            hm. "Text anhängen" und "Parser" widerspricht sich doch etwas …

            Warum?
            Wenn noch Platz auf der letzten PDF-Seite ist, dann würde ich keine neue Seite anfangen wollen.

            Und: Wenn Du Text anhängen willst (das impliziert für mich: am Ende, denn sonst wäre es ja "einfügen"), wozu brauchst Du dann die Klick-Position?

            Genau richtig.
            Ich wollte mit der Klick-Position das Ende des PDF manuell markieren.
            Aber Du hast Recht, mein 2. Hintergedanke war, dass ioch damit vielleicht auch mal etwas einfügen könnte, falls nötig.

            Das Anhängen wirst Du doch auch eher serverseitig per PHP machen, nicht clientseitig per Javascript …

            Unbedingt.
            Der Clientschritt war nur als Zwischenschritt gedacht.
            Wenn der wegfallen könnte, umso besser.

            Jochen

            1. Hi,

              hm. "Text anhängen" und "Parser" widerspricht sich doch etwas … Warum?
              Wenn noch Platz auf der letzten PDF-Seite ist, dann würde ich keine neue Seite anfangen wollen.

              Weil ein Parser etwas analysiert/zerlegt, aber nichts zusammenbaut.

              cu,
              Andreas a/k/a MudGuard

        2. Eigentlich muss ich nur wissen, wann das PDF zuende ist. Weil ich an das PDF einfach nocht etwas Text anhängen will.

          Hm. Welche Technologien stehen Dir dafür serverseitig zur Verfügung?

          Auf meinem Rechner macht pdfunite

          ~$ pdfunite 1.pdf 2.pdf [... n.pdf] out.pdf 
          

          in Sekundenbruchteilen (wir reden hier über hundertstel oder gar tausendstel Sekunden) aus zwei oder mehr Dokumenten eines.

          Und warum machst Du nicht einfach einen iFrame unter den iFrame?

          1. Eigentlich muss ich nur wissen, wann das PDF zuende ist. Weil ich an das PDF einfach nocht etwas Text anhängen will.

            Hm. Welche Technologien stehen Dir dafür serverseitig zur Verfügung?

            Auf meinem Rechner macht pdfunite

            ~$ pdfunite 1.pdf 2.pdf [... n.pdf] out.pdf 
            

            in Sekundenbruchteilen (wir reden hier über hundertstel oder gar tausendstel Sekunden) aus zwei oder mehr Dokumenten eines.

            Und warum machst Du nicht einfach einen iFrame unter den iFrame?

            Und wenn Dein erstes PDF im oberen Drittel der Seite endet?

            Beschreibst Du dann gleich eine neue Seite?

            ich würde gerne dann die restlichen 2/3 der Seizte nutzen. Dazu müßte ich aber erstmal wissen, wo der Text des Ausgangs-PDF endet.

            Jochen

            1. Und wenn Dein erstes PDF im oberen Drittel der Seite endet?

              Dann endet nicht mein erstes PDF im oberen Drittel der Seite - sondern mein LaTeX-Out- oder besser Input (für latex2pdf). Und das ist Text, den ich leicht verarbeiten kann bevor ich das PDF erzeuge.

        3. Hallo,

          Damit kommen wir zur nächsten möglichen Lösung.
          Eigentlich muss ich nur wissen, wann das PDF zuende ist. Weil ich an das PDF einfach nocht etwas Text anhängen will.

          das ist nicht eine mögliche Lösung, sondern der Ansatz der Beschreibung deines eigentlichen Problems.
          Bitte führe die Beschreibung noch etwas weiter aus.

          Warum kannst du nicht im Programm, das das Pdf erzeugt, weiteren Text anfügen? Es gibt pdf-Programme, die problemlos weitere Seiten anhängen können.

          Warum muss das Ganze im Browser passieren?

          Gruß
          Kalk

          1. Hallo,

            Warum kannst du nicht im Programm, das das Pdf erzeugt, weiteren Text anfügen? Es gibt pdf-Programme, die problemlos weitere Seiten anhängen können.

            Warum muss das Ganze im Browser passieren?

            Das Ausgangs-PDF erhalte ich komplett fertig geliefert.

            Und ich möchte quasi unter jedes Ausgangs-PDF noch so eine Art eigenen Footer drunter kleben.

            Aber eben auf der letzten Seite des Ausgangs-PDF, falls genügend Platz da ist, ansonsten auf eine nächste neu zu erzeugende Seite.

            Jochen

            1. Das Ausgangs-PDF erhalte ich komplett fertig geliefert.

              An dieser Stelle kannst Du den „Workflow“ reparieren oder es bleiben lassen. Was willst Du tun wenn das PDF - und dafür ist das PDF-Format geeignet und bestimmt - entweder schon jetzt oder eines schönen Tages plötzlich gegen Veränderungen geschützt ist?

              1. Moin Willi,

                … PDF-Format …

                … zu schreiben ist eine ABM-Maßnahme (sic!) 😉

                Schönen Wochenstart
                Robert

                1. Hallo,

                  … PDF-Format …

                  … zu schreiben ist eine ABM-Maßnahme (sic!) 😉

                  ja, aber solche Beispiele gibt's oft. LCD-Display, ABS-System, ...

                  Wobei PDF hier ein Grenzfall ist, denn die Abkürzung wird gern auch mal als Printed Document File gedeutet.

                  Einen schönen Tag noch
                   Martin

                  --
                  Falls ihr euch wundert, warum ihr zur Zeit so schlecht aus der Wohnung kommt:
                  Das ist so, weil Weihnachten vor der Tür steht. 🎄 🎄🎄
                  1. @@Der Martin

                    … PDF-Format …

                    … zu schreiben ist eine ABM-Maßnahme (sic!) 😉

                    ja, aber solche Beispiele gibt's oft. LCD-Display, ABS-System, ...

                    RAS-Syndrom.

                    🖖 Живіть довго і процвітайте

                    --
                    „Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
                    — @Grantscheam auf Twitter
                  2. Moin Martin,

                    Wobei PDF hier ein Grenzfall ist, denn die Abkürzung wird gern auch mal als Printed Document File gedeutet.

                    das habe ich noch nie gehört oder gelesen, während der offizielle Name nicht gedeutet werden muss.

                    Viele Grüße
                    Robert

              2. Hallo Raketenwilli,

                wenn das PDF fertig geliefert wird, sind da unglaublich viele Workflows denkbar. Die meisten davon dürften für Jochen unzugänglich sein.

                Mich verwirrt allerdings das Ansinnen schon etwas. Ein "fertiges PDF", wo er einen eigenen Footer druntersetzen will. Auf einer Seite, die "ausschließlich für mich selber geschrieben" ist. Ein merkwürdiger Usecase.

                Rolf

                --
                sumpsi - posui - obstruxi
                1. Mich verwirrt allerdings das Ansinnen schon etwas. Ein "fertiges PDF", wo er einen eigenen Footer druntersetzen will. Auf einer Seite, die "ausschließlich für mich selber geschrieben" ist. Ein merkwürdiger Usecase.

                  😂

                  Stimmt. Sorry für die Geheimniskrämerei, das muss von außen betrachtet etwas verwirrend wirken. 😬😉

            2. Hallo Jochen,

              okay. Aber das mit HTML zu lösen ist von hinten durch die Brust ins Auge geschossen.

              Du könntest natürlich über das PDF ein div überblenden. Aber

              • Du musst rauskriegen, wo das div hinsoll. Ein PDF Viewer generiert kein DOM, das Du abfragen könntest - ich sehe keine Datenquelle für diese Info
              • Wenn der Anwender das PDF speichert, ist das div wieder weg. Es ist nur auf dem Bildschirm.

              Ich subsummiere also den Rat des Forums. Tu's nicht. Mach es am Server, mit einer PDF Library.

              Der Clientschritt war nur als Zwischenschritt gedacht.
              Wenn der wegfallen könnte, umso besser.

              Dieser Zwischenschritt führt in einen Sumpf. Schone deine Stiefel und spring drüber.

              Rolf

              --
              sumpsi - posui - obstruxi
              1. Hallo Rolf,

                Ich subsummiere also den Rat des Forums. Tu's nicht. Mach es am Server, mit einer PDF Library.

                Der Clientschritt war nur als Zwischenschritt gedacht.
                Wenn der wegfallen könnte, umso besser.

                Dieser Zwischenschritt führt in einen Sumpf. Schone deine Stiefel und spring drüber.

                Ok, meine Idee nun ist, das PDF zu parsen und die tiefste y-Koordinate zu ermitteln, die das PDF inhaltlich zu bieten hat.

                Jochen

                1. Ok, meine Idee nun ist, das PDF zu parsen

                  Das ist, war und bleibt keine gute Idee, weil es unmöglich sein kann oder werden wird.

                  Und der Aufwand ist beträchtlich. Selbst wenn es - mit wirklich mörderischen Aufwand - für ein Dokument gelingen sollte kann die Freunde schon beim nächsten Dokument einer tiefen Enttäuschung weichen.

                  Viel „Spaß“!

                  1. Das ist, war und bleibt keine gute Idee, weil es unmöglich sein kann oder werden wird.

                    Und der Aufwand ist beträchtlich. Selbst wenn es - mit wirklich mörderischen Aufwand - für ein Dokument gelingen sollte kann die Freunde schon beim nächsten Dokument einer tiefen Enttäuschung weichen.

                    Viel „Spaß“!

                    Habe es mal mit dem PDFParser versucht, aber da kommt wirklich Kram raus. 🤪

                    Werde es nun mal mit Andreas Idee versuchen.

                    Jochen

            3. Hi,

              Das Ausgangs-PDF erhalte ich komplett fertig geliefert.

              Und ich möchte quasi unter jedes Ausgangs-PDF noch so eine Art eigenen Footer drunter kleben.

              Aber eben auf der letzten Seite des Ausgangs-PDF, falls genügend Platz da ist, ansonsten auf eine nächste neu zu erzeugende Seite.

              Ermittle die Anzahl der Seiten im PDF.

              Füge dem PDF Deinen Teil am Ende hinzu (ohne am Anfang Deines Teils einen Seitenumbruch einzufügen).

              Ermittle die Seiten im zusammengefügten PDF.

              Falls die neue Seitenzahl gleich der alten ist: Fertig.

              Sonst hat Dein Teil nicht mehr auf die letzte Seite gepaßt, also weiter mit:

              Wirf das zusammengesetzte PDF weg.

              Füge an das gelieferte PDF erst einen Seitenumbruch und dann Deinen Teil an.

              cu,
              Andreas a/k/a MudGuard

              1. Hi,

                Das Ausgangs-PDF erhalte ich komplett fertig geliefert.

                Und ich möchte quasi unter jedes Ausgangs-PDF noch so eine Art eigenen Footer drunter kleben.

                Aber eben auf der letzten Seite des Ausgangs-PDF, falls genügend Platz da ist, ansonsten auf eine nächste neu zu erzeugende Seite.

                Ermittle die Anzahl der Seiten im PDF.

                Füge dem PDF Deinen Teil am Ende hinzu (ohne am Anfang Deines Teils einen Seitenumbruch einzufügen).

                Ermittle die Seiten im zusammengefügten PDF.

                Falls die neue Seitenzahl gleich der alten ist: Fertig.

                Sonst hat Dein Teil nicht mehr auf die letzte Seite gepaßt, also weiter mit:

                Wirf das zusammengesetzte PDF weg.

                Füge an das gelieferte PDF erst einen Seitenumbruch und dann Deinen Teil an.

                cu,
                Andreas a/k/a MudGuard

                Wow, sehr coole Idee. 👍

                Danke, das probiere ich aus!

                Jochen

              2. Hallo Andreas,

                Füge dem PDF Deinen Teil am Ende hinzu (ohne am Anfang Deines Teils einen Seitenumbruch einzufügen).

                Mist, auch die Kombi aus FPDI und TCPDF will wissen, wohin sie das schreiben soll. Ich muss als die XY-Koordinaten angeben.
                Tu ichs nicht, wird 0,0 genommen.
                Ich habe mich also im Kreis gedreht, ich benötige zumindest den Y-Wert des letzten PDF-Eintrages der letzten Seite.

                Jochen

                1. Mist, auch die Kombi aus FPDI und TCPDF will wissen, wohin sie das schreiben soll. Ich muss als die XY-Koordinaten angeben.
                  Tu ichs nicht, wird 0,0 genommen.
                  Ich habe mich also im Kreis gedreht, ich benötige zumindest den Y-Wert des letzten PDF-Eintrages der letzten Seite.

                  Dich interessiert die "gerenderte Koordinate Y" in "Viewer A, B oder C". Die steht aber nicht im PDF selbst. Wenn Du das genau haben willst, musst Du möglichst präzise rendern und das Ergebnis auslesen.

                  Es gibt zig Faktoren, wie zum Beispiel die verwendete Schrift oder irgendwelche Vektoren, die irgendwo ihren Strich hinpinseln.

                  Wenn das PDF dann noch Schriften verwendet, die nicht embedded sind, wird es nahezu aussichtslos…

                  Würde mich jemand zu so einer Sache prügeln, dann würde ich das PDF zunächst nach Bitmap rendern (z.B. via Ghostscript) und dann Pixelanalyse (z.B. via ImageMagick) betreiben: "letztes Koordinate Y mit Farbdeckung > 0"... dann auf das PDF zurückinpertretieren... Kompletter Wahsinn IMHO... Häng Deine Seite an das PDF als neue Seite dran (z.B. via Ghostscript) und gut ist.

                  1. Hallo Mitleser,

                    Dich interessiert die "gerenderte Koordinate Y" in "Viewer A, B oder C". Die steht aber nicht im PDF selbst. Wenn Du das genau haben willst, musst Du möglichst präzise rendern und das Ergebnis auslesen.

                    Es gibt zig Faktoren, wie zum Beispiel die verwendete Schrift oder irgendwelche Vektoren, die irgendwo ihren Strich hinpinseln.

                    Jetzt, wo Du es sagst.
                    Du hast natürlich völlig recht.

                    Würde mich jemand zu so einer Sache prügeln, dann würde ich das PDF zunächst nach Bitmap rendern (z.B. via Ghostscript) und dann Pixelanalyse (z.B. via ImageMagick) betreiben: "letztes Koordinate Y mit Farbdeckung > 0"... dann auf das PDF zurückinpertretieren... Kompletter Wahsinn IMHO... Häng Deine Seite an das PDF als neue Seite dran (z.B. via Ghostscript) und gut ist.

                    Ich finde die Idee gar nicht so schlecht.
                    Vielleicht ein wenig umgewandelt:
                    Ich könnte die letzte Seite des PDF in ein Image umwandeln.
                    Anschließend müsste ich dann ein Rechteck des image am unteren bildrand daraufhin prüfen, ob sich ausschließlich weiße Pixel darin befinden. Falls ja, habe ich Platz zum schreiben, falls nein, muss ich eine Seite hinzufügen.

                    Weiß zufällig jemand, wie man mit Image magick solch ein Rechteck festlegt und auf ausschließlich weiße Pixel prüft?
                    Immer wieder schön, sich in solch (teilweise sinnbefreite) Aktionen zu verbeißen. 😂😬

                    1. Weiß zufällig jemand, wie man mit Image magick solch ein Rechteck festlegt und auf ausschließlich weiße Pixel prüft?
                      Immer wieder schön, sich in solch (teilweise sinnbefreite) Aktionen zu verbeißen. 😂😬

                      Könnte natürlich in zwei Schleifen verschachtelt, jedes Pixel

                      $pixel = $image->getImagePixelColor($x, $y);

                      daraufhin prüfen, ob es weiß ist. Weiß nihct, ob es einen besseren Weg gibt?

                      1. Weiß zufällig jemand, wie man mit Image magick solch ein Rechteck festlegt und auf ausschließlich weiße Pixel prüft?
                        Immer wieder schön, sich in solch (teilweise sinnbefreite) Aktionen zu verbeißen. 😂😬

                        Könnte natürlich in zwei Schleifen verschachtelt, jedes Pixel

                        $pixel = $image->getImagePixelColor($x, $y);

                        daraufhin prüfen, ob es weiß ist. Weiß nihct, ob es einen besseren Weg gibt?

                        Mir fällt kein viel Besserer ein. Halte es aber weiterhin für Quatsch / komplett oversized.

                        Je nach PDF musst Du dann auch noch unterscheiden, was wirklich "freier Bereich" ist: wirklich nur weiß, oder evtl. auch transparent? Welchen Farbraum hat das PDF?

                        Fazit: lass den Quatsch und mach was sinnvolleres ;-)

                        1. Hallo,

                          Immer wieder schön, sich in solch (teilweise sinnbefreite) Aktionen zu verbeißen. 😂😬

                          ja, vielleicht als reine Herausforderung, aber ... cui bono?

                          Mir fällt kein viel Besserer ein. Halte es aber weiterhin für Quatsch / komplett oversized.

                          Je nach PDF musst Du dann auch noch unterscheiden, was wirklich "freier Bereich" ist: wirklich nur weiß, oder evtl. auch transparent? Welchen Farbraum hat das PDF?

                          Oder hat das Original-PDF eine Fußzeile? Dann möchte man die Ergänzung vermutlich zwischen das Ende des Textrumpfs und die Fußzeile setzen.

                          Fazit: lass den Quatsch und mach was sinnvolleres ;-)

                          Ich schließe mich dieser Empfehlung an.

                          Einen schönen Tag noch
                           Martin

                          --
                          Falls ihr euch wundert, warum ihr zur Zeit so schlecht aus der Wohnung kommt:
                          Das ist so, weil Weihnachten vor der Tür steht. 🎄 🎄🎄
                          1. Oder hat das Original-PDF eine Fußzeile? Dann möchte man die Ergänzung vermutlich zwischen das Ende des Textrumpfs und die Fußzeile setzen.

                            Bevor ich mich weiter einlasse: das ist das finale Killerargument gegen die ganze Nummer: buenos argumentos!

                            1. Oder hat das Original-PDF eine Fußzeile? Dann möchte man die Ergänzung vermutlich zwischen das Ende des Textrumpfs und die Fußzeile setzen.

                              Bevor ich mich weiter einlasse: das ist das finale Killerargument gegen die ganze Nummer: buenos argumentos!

                              Sehe ich komplett anders.
                              Habe es schon dahingehend umprogrammiert, dass nun die komplette untere Hälfte des PDF/Image genau daraufhin untersucht wird.
                              Eine Fußzeile kann man wunderbar eingrenzen. Ist Fußzeile und Freiraum darüber enthalten, dann finde ich Beides.
                              Klappt vorzüglich. 😉

                              Jochen

                              P.S: Natürlich wird man irgendein haar in der Suppe finden können. Da aber in diesem Fall nicht 100% automatisiert ablaufen müssen und ich im Zweifel manuell nachsteuern kann, ist das undramatisch und ich muss nihct auf "kontruierte Probleme" Rücksicht nehmen. Normale PDFs, die ich bekomme, werden verarbeitet, also passt es.

                              1. Oder hat das Original-PDF eine Fußzeile? Dann möchte man die Ergänzung vermutlich zwischen das Ende des Textrumpfs und die Fußzeile setzen.

                                Bevor ich mich weiter einlasse: das ist das finale Killerargument gegen die ganze Nummer: buenos argumentos!

                                Sehe ich komplett anders.
                                Habe es schon dahingehend umprogrammiert, dass nun die komplette untere Hälfte des PDF/Image genau daraufhin untersucht wird.
                                Eine Fußzeile kann man wunderbar eingrenzen. Ist Fußzeile und Freiraum darüber enthalten, dann finde ich Beides.
                                Klappt vorzüglich. 😉

                                Wenn Du glücklich bist, sind wir auch glücklich. Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                1. Wenn Du glücklich bist, sind wir auch glücklich. Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                  Bin ich, daher nochmal danke für Deinen Tip, der war für mich goldrichtig.👍

                                  1. Wenn Du glücklich bist, sind wir auch glücklich. Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                    Bin ich, daher nochmal danke für Deinen Tip, der war für mich goldrichtig.👍

                                    Be warned. You underestimate the power of the Dark Side.

                                    1. Wenn Du glücklich bist, sind wir auch glücklich. Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                      Bin ich, daher nochmal danke für Deinen Tip, der war für mich goldrichtig.👍

                                      Be warned. You underestimate the power of the Dark Side.

                                      Naja. Das Worstcase-Szenario sieht wie folgt aus:
                                      Es kommt anstelle eines gewünschten Ergbenisses totaler Quark raus.
                                      Der erste, der den dann zu Gesicht bekommt, bin ich selber.
                                      Dann müsste ich in die DB gehen und manuell einen SetX und einen SetY Wert eintragen.
                                      Im Grunde also eine kontrollierte Situation. 😉😇

                                      1. Wenn Du glücklich bist, sind wir auch glücklich. Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                        Bin ich, daher nochmal danke für Deinen Tip, der war für mich goldrichtig.👍

                                        Be warned. You underestimate the power of the Dark Side.

                                        Naja. Das Worstcase-Szenario sieht wie folgt aus:
                                        Es kommt anstelle eines gewünschten Ergbenisses totaler Quark raus.
                                        Der erste, der den dann zu Gesicht bekommt, bin ich selber.
                                        Dann müsste ich in die DB gehen und manuell einen SetX und einen SetY Wert eintragen.
                                        Im Grunde also eine kontrollierte Situation. 😉😇

                                        Schön, schön, schön. Hauptsache, Du lässt den Quatsch mit dem IFrame und JavaScript für die Nummer bleiben 😉

                                2. Hallo Mitleser,

                                  Um sinngemäß mit Gunnar zu sprechen: dont try this at home, kids 😉

                                  Aber hier es ist doch genau andersherum!

                                  ONLY try this at home, kids! On a soft carpet, on a cushioned chair. On the street, you'll stub your toe and someone will kick your a... donkey.

                                  Rolf

                                  --
                                  sumpsi - posui - obstruxi
                        2. Fazit: lass den Quatsch und mach was sinnvolleres ;-)

                          Habs jetzt trotzdem mal gemacht und es funktioniert.

                          // letzte Seite des PDF in Image wandeln
                          $file  = $_SERVER['DOCUMENT_ROOT']."/".$filename;
                          $lastPage = $pageCount-1;
                          $img2 = new imagick($file."[".$lastPage."]");
                          $img2->setImageFormat('jpg');
                          file_put_contents ($_SERVER['DOCUMENT_ROOT']."tmp/temp.jpg", $img2);
                          
                          $fp = fopen($_SERVER['DOCUMENT_ROOT']."tmp/pixel.txt",'a+');
                          //0-530,710-842
                          for($myY = 710;$myY < 842;$myY++) {
                              for($myX = 0;$myX < 530;$myX++) {
                                  $pixel = $img2->getImagePixelColor($myX,$myY);
                                  $colors = $pixel->getColorAsString();
                                  fwrite($fp,$colors."\n");
                              }
                          }
                          fclose($fp);
                          

                          Netter Spaß, danke für den Tip.

                          Jochen

                          1. Moin Jochen,

                            allerdings hast du dann die letzte Seite als Bild und nicht mehr als Text.

                            Viele Grüße
                            Robert

                            1. Moin Jochen,

                              allerdings hast du dann die letzte Seite als Bild und nicht mehr als Text.

                              Viele Grüße
                              Robert

                              Hallo Robert,

                              was meinst Du damit?

                              Dass ich mir damit das Ausgangs-PDF zerstöre? Das ist nicht der Fall.

                              Womöglich verstehe ich Dich aber falsch?

                              Jochen

                              1. Moin Jochen,

                                allerdings hast du dann die letzte Seite als Bild und nicht mehr als Text.

                                was meinst Du damit?

                                du extrahierst die letzte Seite als Bild und ermittelst Koordinaten darin. Was passiert dann genau?

                                Viele Grüße
                                Robert

                                1. Hallo,

                                  allerdings hast du dann die letzte Seite als Bild und nicht mehr als Text.

                                  was meinst Du damit?

                                  du extrahierst die letzte Seite als Bild und ermittelst Koordinaten darin. Was passiert dann genau?

                                  mit den ermittelten Koordinaten geht er dann wieder ins Originaldokument.
                                  So habe ich ihn jedenfalls verstanden.

                                  Einen schönen Tag noch
                                   Martin

                                  --
                                  Falls ihr euch wundert, warum ihr zur Zeit so schlecht aus der Wohnung kommt:
                                  Das ist so, weil Weihnachten vor der Tür steht. 🎄 🎄🎄
                                  1. Hallo zusammen,

                                    mit den ermittelten Koordinaten geht er dann wieder ins Originaldokument.
                                    So habe ich ihn jedenfalls verstanden.

                                    Hast Du exakt korrekt verstanden, genau so ists gedacht.
                                    Zudem extrahiere ich die letzte Seite nicht wirklich. Das bedeutet, dass das Original komplett unversehrt bleibt. Die letzte Seite wird nur kopiert und zum Image gewandelt.

                                    Jochen

              3. Ermittle die Anzahl der Seiten im PDF.

                Füge dem PDF Deinen Teil am Ende hinzu (ohne am Anfang Deines Teils einen Seitenumbruch einzufügen).

                Ermittle die Seiten im zusammengefügten PDF.

                Falls die neue Seitenzahl gleich der alten ist: Fertig.

                Sonst hat Dein Teil nicht mehr auf die letzte Seite gepaßt, also weiter mit:

                Wirf das zusammengesetzte PDF weg.

                Füge an das gelieferte PDF erst einen Seitenumbruch und dann Deinen Teil an.

                Mit welchem magischen Mechanismus (also bis auf Ermittlung Seitenzahl, das ist easy) soll das genau funktionieren?

                1. Hi,

                  Mit welchem magischen Mechanismus (also bis auf Ermittlung Seitenzahl, das ist easy) soll das genau funktionieren?

                  Ist schon ne Weile (ca. 5 Jahre) her, daß ich PDFs generieren mußte - und damals unter Java. Ich meine, die verwendete Bibliothek hieß itext, würde aber keinen Eid darauf schwören. Kann auch nicht sagen, ob das was kostenfreies war oder ob das was gekostet hat - darum haben sich die höheren Chargen in der Firma gekümmert.

                  Da mußte man keine x/y-Position ermitteln, da konnte man einfach sagen: hänge einen Absatz an, mit Schrift x in Größe y und Farbe z, und Text abc.

                  Ich bin davon ausgegangen, daß es vergleichbare Bibliotheken auch für PHP gibt.

                  cu,
                  Andreas a/k/a MudGuard

                  1. Ist schon ne Weile (ca. 5 Jahre) her, daß ich PDFs generieren mußte - und damals unter Java. Ich meine, die verwendete Bibliothek hieß itext, würde aber keinen Eid darauf schwören. Kann auch nicht sagen, ob das was kostenfreies war oder ob das was gekostet hat - darum haben sich die höheren Chargen in der Firma gekümmert.

                    Da mußte man keine x/y-Position ermitteln, da konnte man einfach sagen: hänge einen Absatz an, mit Schrift x in Größe y und Farbe z, und Text abc.

                    Ich bin davon ausgegangen, daß es vergleichbare Bibliotheken auch für PHP gibt.

                    Mit Sicherheit gibt es die. Der Punkt ist nur: "die Bibliothek" hat zum Zeitpunkt des Satzes des PDF zumindest eine Chance, die Sachlage zu beurteilen. Eine mehr oder weniger kontrollierte Situation. Bei der Manipulation eines bestehenden PDF sieht das deutlich düsterer aus.

  3. Hallo Jochen,

    ich muss mal etwas nachfragen:

    Du willst an ein PDF noch etwas anhängen, je nach Platz noch auf der letzten Seite oder auf einer neuen Seite?

    Das kann auch mit manueller Unterstützung erfolgen?

    Warum verwendest du kein PDF-Bearbeitungs-Programm?

    Gruß
    Jürgen