PDF/SVG Dateien zusammenführen (überlagern) - welche Komponente?

  • VB.NET
  • .NET 4.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    PDF/SVG Dateien zusammenführen (überlagern) - welche Komponente?

    Neu

    Hallo liebe Freunde,

    ich habe auf der einen Seite eine PDF-Datei (kann einseitig oder mehrseitig sein). Auf der anderen Seite eine SVG-Datei mit handschriftlichen Notizen (für jede Seite eine eigene Datei).
    Nun möchte ich beides zusammenführen. Also die Handschriftlichen Notizen aus der SVG-Datei auf die jeweilige Seite des PDF´s aufbringen.

    Ich habe im Netz schon mal recherchiert. Aber ich habe bisher keine Komponente gefunden die das machen könnte.
    Habt Ihr sowas schon gemacht und wie oder mit welcher Komponente habt Ihr das gemacht?

    Was ich schon ausprobiert habe, aber nicht die gewünschte Qualität brachte:
    Die Komponente "GemBox.PDF". Diese kann PDF-Dateien in Grafikdateien konvertieren. Ich kann diese Grafikdateien dann mit Handschriften per Bitmap-Drawing mischen und dann mit einem PDF-Creator (diese Komponente habe ich) wieder als PDF speichern (eingebettetes Bild). Jedoch ist die Bildqualität und die Datenqualtität der GemBox.PDF Komponente grottenschlecht und das Ergebnis ist nicht zufriedenstellend.

    Ich bin gerne bereit ein paar hundert Euro für diese Komponente auszugeben, wenn diese meine Aufgaben lösen kann.

    Was ich bei der GemBox.PDF Komponente noch negativ festgestellt habe: sobald ich daraus Funktionen aufrufe, stellt sich die Anwendungsskalierung der Form wieder auf automatisch. Ich habe die in meiner Anwendung aber abgedreht.

    LG Roland
    Bilder
    • 13012021161506.jpg

      229,03 kB, 1.007×452, 26 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com

    Neu

    Hallo.

    Ich benutze für den zweck zwei Komponenten, einen PDF-Merger, ist ja bei Ihnen vorhanden.
    InkScape, das SVG-Bearbeitungsprogramm "EVER"... Ok, ich zeichne damit viel zu viel...

    Das Programm kann PDF´s öffnen und diese auch wieder speichern.
    Leider ist die Speicherung/der Export nicht so Komfortabel,
    es lässt sich aber mit etwas Übung gut als Dauerlösung nutzen.

    InkScape ist Freeware und OpenSource.

    Zudem sind sowieso PDF-Dateien im innern zum Teil einfache SVG-Daten (Pfade). (glaube ich... :) )

    Ich hoffe es hilft etwas, meine 50 Pfennig... "...was Schatz? Der heist 50 Centurio. Wahh? Cent? Ahaa!" :)

    c.u. Joshi aus HH in DE und herzliche grüße an alle Wiener Bezirke... :D

    Neu

    @Joshi

    Nein, einen PDF-Merger habe ich leider keinen.
    Ich habe nur eine Komponenten (Virtual Print Engine) wo ich ganzseitige Grafikdateien einfach als PDF ausgebe. Aber leider kann das Ding keine PDF´s öffnen um diese weiterzubearbeiten.

    PS: Wiener Neustadt ist kein Wiener Bezirk, sondern eine eigene Stadt ca. 40 km südlich von Wien. Aber trozdem danke für die lieben Grüße ;-).
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com

    Neu

    @dive26 Ich nutze das PdfSharp, funktioniert problemlos.
    Mit SVG kenn ich mich nicht aus.
    sourceforge.net/projects/pdfsharp/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    @RodFromGermany
    Kannst Du mit dem PDFSharp ein PDF öffnen und neue Polygon-Pfade (ähnlich wie bei SVG) hineinzeichnen?
    Edit: ja kann man, habe ich gefunden. Hört sich schon gut an.

    Vorerst kann ichs auch auf die "einfache" Art machen:
    pdfsharp.net/wiki/graphics-sam…mage_with_transparency_25
    Da meine fertig gerenderten Handschriften auch als transparente Grafik vorliegen, kann ich diese ja ganz einfach über das PDF legen.
    Und (hoffentlich) auch die farbe "white" zusätzlich transparent machen. Das wäre die Lösung.

    Wenn das funktionier, dann kann ich mir später immer noch diese Polygon-Geschichte ansehen - ist aber mehr Aufwand.

    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()

    Neu

    dive26 schrieb:

    ein PDF öffnen
    geht damit wohl nicht, zumindest nutze ich solch nicht.
    Ich bin mal übeer ein riesen Projekt gestolpert, damit konntest Du PDFs malen, das war allerdings nicht meine Richtung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    @RodFromGermany
    geht damit wohl nicht, zumindest nutze ich solch nicht.


    Laut dem Code hier sollte mann ein leeres PDF erstellen können und dann ein vorhandenes reinkopieren. Dann müsste man doch in dieses Dokument auch alles andere reinschreiben können. Ich werds mal ausprobieren.
    forum.pdfsharp.net/viewtopic.php?p=2637#p2637
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com

    Neu

    Wenn das funktioniert, kannst Du ja ein Tutorial erstellen. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    @RodFromGermany

    Vielen Dank nochmals für den Tipp mit PDFSharp. Hat funktioniert.
    Für ein Tutorial ist mein Programmierstil leider nicht "schön" genug ;-).
    Aber hier mein Code mit dem ich die PDFSharp.dll (welche vorher kompiliert werden muss) verwende:

    Die Auflösung ist leider nicht sehr hoch beim PDFSharp, daher wirkt die Schrift etwas pixelig.
    Da es hier aber lediglich um Anmerkungen an einem PDF geht, reicht das.

    Wenn ich demnächst besonders viel Zeit habe, könnte ich auch versuchen die Strokes per Polygone wie beim SVG Format direkt zu ziehen. Bei SVG ist das Ergebnis der Schrift am schönsten.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports PdfSharp
    3. Imports PdfSharp.Pdf
    4. Imports PdfSharp.Pdf.IO
    5. Imports PdfSharp.Drawing
    6. Imports System
    7. Imports System.IO
    8. Imports System.Drawing
    9. Imports System.Drawing.Drawing2D
    10. Imports System.Drawing.Imaging
    11. Module MDL_PDFSharp
    12. ''' <summary>
    13. ''' Führt eine PDF Datei und Handnotes (Liste mit Dateinamen) zusammen (immer alle Seiten)
    14. ''' </summary>
    15. ''' <param name="QuellPDF"></param>
    16. ''' <param name="ZielPDF"></param>
    17. ''' <param name="ImageDateiListe"></param>
    18. ''' <returns></returns>
    19. Public Function MergePDF(QuellPDF As String, ZielPDF As String, ImageDateiListe() As String) As String
    20. If Not File.Exists(QuellPDF) Then
    21. Return QuellPDF + " not found"
    22. Exit Function
    23. End If
    24. Try
    25. If File.Exists(ZielPDF) Then File.Delete(ZielPDF)
    26. Catch ex As Exception
    27. 'Löschen schlug fehl, weil wohl noch in Verwendung (offen
    28. Return "Can not write destintaion file " + ZielPDF + ". Maybe the document is open or has flag 'readonly'."
    29. Exit Function
    30. End Try
    31. Dim RetourWert As String = "ERROR: Only A4 and Letter format in orientation portrait are supported!"
    32. Dim PDFDoc As PdfDocument = PdfReader.Open(QuellPDF, PdfDocumentOpenMode.Import)
    33. Dim NewPDFDoc As PdfDocument = New PdfDocument()
    34. For iPage As Integer = 0 To PDFDoc.PageCount - 1
    35. '// Seite hinzufügen und gleichzeitig aus dem QuellPDF kopieren
    36. NewPDFDoc.AddPage(PDFDoc.Pages(iPage))
    37. '// Zeiger auf einzelne Seite herauspicken
    38. Dim page As PdfPage = NewPDFDoc.Pages(iPage)
    39. ' XGraphics Objekt erstellen
    40. Dim gfx As XGraphics = XGraphics.FromPdfPage(page)
    41. '// Handnotes hinzufügen - aber nur wenn eine entsprechende Datei existiert
    42. If File.Exists(ImageDateiListe(iPage)) Then
    43. Dim xImage As Bitmap = DirectCast(Image.FromFile(ImageDateiListe(iPage)), Bitmap)
    44. xImage.MakeTransparent(Color.White)
    45. Dim CopyWidth As Integer = CInt(page.Width)
    46. Dim CopyHeight As Integer = CInt(page.Height)
    47. 'Messagebox.Show(CopyWidth.ToString + " * " + CopyHeight.ToString)
    48. '// Prüfen ob A4 oder Letter Hochformat
    49. 'If (CopyWidth <> 595 And CopyWidth <> 612) Or (CopyHeight <> 792 And CopyHeight <> 842) Then
    50. 'Messagebox.Show("ERROR Es werden nur A4 und Letter imHochformat unterstützt!")
    51. 'End If
    52. '// Anpassung an A4 und Letter nur Hochformat
    53. If CopyWidth = 595 Then CopyWidth = 630 : RetourWert = "A4" 'A4
    54. If CopyHeight = 792 Then CopyHeight = 816 : RetourWert = "Letter" ' Letter
    55. '// Bild auf die Grafik zeichnen
    56. gfx.DrawImage(xImage, 0, 0, CopyWidth, CopyHeight)
    57. End If
    58. Next iPage
    59. RetourWert += " " + PDFDoc.PageCount.ToString + " pages"
    60. NewPDFDoc.Save(ZielPDF)
    61. NewPDFDoc.Dispose()
    62. PDFDoc.Dispose()
    63. Return RetourWert
    64. End Function
    65. End Module
    Bilder
    • 13012021233434.jpg

      484,93 kB, 1.027×1.162, 16 mal angesehen
    • 13012021233940.jpg

      296,37 kB, 775×1.069, 16 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()

    Neu

    Habe heute mit Spire.PDF.dll ($599,00) herumprobiert. Ich muss sagen 100x besser als Gembox.dll ($680,00).
    Die PDF to Image Qualität ist hervorragend und die Windows-Anwendungsskalierung der App wird nicht verändert.
    Man kann auch SVG in PDF einfügen und PDF´s manigfaltig bearbeiten. Die .dll hat dafür aber auch 22 MByte ;-).

    Die Free Edition reicht vorerst für mein kostenloses Community Projekt. Aber ich denke früher oder später werde ich mir diese Komponente zulegen.
    Achso, falls es jemanden interessiert: freeremarkabletools.com/. Leider kann man 90% der Funktionen nur starten oder nutzen wenn man ein reMarkable hat.
    Das PDF-Manual deckt vorerst die kostenlosen Funktionen ab und bietet einen Kurzeinblick in das spezielle Modul "reSyncable". Das reSyncable ist bis Ende März kostenlos und danach wird es um die 15 Euro Einmallizenzgebühr kosten. Sobald das reSyncable komplett fertig ist, werde ich auch ein Anwendungsvideo hochladen - so wie das vom rM2 Template Helper:


    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): bocomponent.com | freeremarkabletools.com