ahstax
Goto Top

PDF anzeigen, Positionsfeld für Text anzeigen, bewegen

Hallo,

ich würde gerne in PDF-Dokumente auf der ersten Seite einen Text einfügen. Mit iTextSharp klappt das ziemlich einfach.
Ich würde aber nun gerne die erste Seite des PDFs anzeigen lassen, darin einen Rahmen darstellen, der die Größe des einzufügenden Textes (eingegeben in eine TextBox) hat und mit der Maus verschiebbar ist.
Sinn? Der eingefügte Text soll keinen bestehenden Text überdecken.

Wo und mit welchem vb.net-Zauber könnte ich denn da ansetzen?

Ich bin gespannt auf Hinweise und Anregungen!!!

Neugierige Grüße,
Andreas

Content-Key: 217587

Url: https://administrator.de/contentid/217587

Printed on: April 23, 2024 at 15:04 o'clock

Member: colinardo
colinardo Sep 24, 2013 at 07:22:58 (UTC)
Goto Top
Hallo Andreas,
klingt also wolltest du hier einen rudimentären PDF-Editor basteln face-wink
Du könntest das so lösen: Du baust in VB.Net eine Form mit dem Adobe Reader ActiveX der dir das PDF in einer festen Zoomstufe anzeigt(ganze Seite), in dieser Form fängst du die Mausposition über dem Control ab und speicherst sie bei einem Klick in einer Variablen; diese Koordinaten rechnest du dann auf relative PDF-Seitengröße um und fügst mit iTextSharp den Text an der gewünschten Stelle ein.
Ansonsten wäre eine Alternative nach einem bestimmten Text im PDF mit iTextSharp zu suchen und anhand dessen Position deinen Text positionieren.

Grüße Uwe
Member: ahstax
ahstax Sep 24, 2013 at 14:31:36 (UTC)
Goto Top
Hallo Uwe,

Danke für Deine Antwort.

Ein etwas geänderter Ansatz meinerseits führte zu folgendem Zwischenergebnis:
Das PDF wird geladen, die erste Seite abgetrennt (itextsharp) und in ein tiff umgewandelt (com.adobe.acrobat.tiff).
In das tiff wird der einzufügende Text (3 Zeilen mit unterschiedlicher Formatierung) eingesetzt (Graphic.DrawString(Text, Font, Brush, Position)).
Um den eingefügten Text wird ein Rechteck gezeichnet.
Das tiff wird in einer Picturebox angezeigt.

Leider ist das Recheckt höher, als der Text... face-sad
Text1 = "Texttexttext"  
Font1 = New System.Drawing.Font("Arial", 14, FontStyle.Regular)  
Position1 = New Point(8, 5)

Text2 = txtBoxText.Text
Font2 = New System.Drawing.Font("Arial", 28, FontStyle.Regular)  
Position2 = New Point(3, 5 + 16)

Text3 = txtBoxUnserZeichen.Text
Font1 = New System.Drawing.Font("Arial", 14, FontStyle.Regular)  
Position3 = New Point(8, 5 + 16 + 35)

        Dim stringSize1 As New SizeF
        Dim stringSize2 As New SizeF
        Dim stringSize3 As New SizeF
        Dim stringSize As New SizeF

        stringSize1 = Graphic.MeasureString(Text1, Font1)
        stringSize2 = Graphic.MeasureString(Text2, Font2)
        stringSize3 = Graphic.MeasureString(Text3, Font1)
        stringSize.Height = stringSize1.Height + stringSize2.Height + stringSize3.Height

        If stringSize1.Width >= stringSize2.Width And stringSize1.Width >= stringSize3.Width Then
            stringSize.Width = stringSize1.Width
        Else
            If stringSize2.Width >= stringSize1.Width And stringSize2.Width >= stringSize3.Width Then
                stringSize.Width = stringSize2.Width
            Else
                If stringSize3.Width >= stringSize1.Width And stringSize3.Width >= stringSize2.Width Then
                    stringSize.Width = stringSize3.Width
                End If
            End If
        End If

        Dim Zeilenabstand As Integer = Font1.GetHeight
        'String auf Bild zeichnen  
        Graphic.DrawString(Text1, Font1, Brush, Position1)
        Graphic.DrawString(Text2, Font2, Brush, Position2)
        Graphic.DrawString(Text3, Font1, Brush, Position3)

        Graphic.DrawRectangle(New Pen(Color.Red, 1), 8.0F, 5.0F, CInt(stringSize.Width), CInt(stringSize.Height))

Woran kann das liegen?
Und irgendwie habe ich festgestellt, dass unterschiedliche Größenangaben (zumindest beruhend auf unterschiedlichen Basen) verwendet werden, kann das sein? (Schriftgröße, image.height...)

Neugierige Grüße,
Andreas


Der Vollständigkeit halber:meine nächste Schritte jetzt:
Rechteck in die richtige Größe bringen
Rechteck (einschließlich Text) beweglich machen