Tabelle ausdrucken

  • Hi,
    jaaa ich hab auch mal wieder ein Problem.

    Ich möchte eine Tabelle ausdrucken mit folgenden Anforderungen:
    1. Seitenumbruch an bestimmten Stellen (nach 20 Zeilen) <<wichtig!
    2. Bei jeder neuen Seite den Tabellenheader erneut einfügen <<wichtig!
    3. Ein Logo auf der ersten Seite rechts oben
    4. Eine Überschrift auf der 1. Seite
    5. Möglichst ohne fremdprogramme und im hintergrund (lediglich druckerauswahl soll erscheinen)
    6. Möglichst ohne viel Performance zu rauben da der Laptop auf dem das ding läuft relativ alt ist

    Im moment habe ich es per HTML gelöst, ist allerdings nicht perfekt, AutoIt schreibt eine HTML datei und druckt diese dann über den FireFox aus. Manchmal gibt es Fehler die aber z.b. bei zul angen Inhalten in einer Zelle auftreten und so weiter. Also es ist wirklich nur provisorisch und ich suche ein geeigneteres Format, wie schwirig ist es z.b. direkt so etwas int PRT format oder PDF (etwas was auf jedem rechner und von jedem drucker gleich interpretiert wird) auszudrucken?

    Hoffe ihr habt irgendeine Idee :)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hallo FireFlyer,

    Mit dem Script kannst Du pdf-Dateien erstellen. :thumbup:
    hab ich mal irgendwo "gefunden".
    Kann leider nicht mehr sagen, von wem das ist...

    Ich verwende das Script ohne GUI, mit eigener Formatierung.
    Das Kriegst Du sicher auch hin ;)
    Erstellt zwar "nur" Version 1.4, aber Du brauchst es ja nur zum formatierten ausdrucken...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("PDF-Creator",500,520)
    GUICtrlCreateGroup("Seitenformat",10,30,170,70)
    GUICtrlCreateGroup("Rand (mm)",190,30,105,70)
    GUICtrlCreateGroup("Schriftformat",315,30,175,70)
    GUICtrlCreateRadio("Querformat",20,70)
    GUICtrlCreateLabel("Autor:",10,475,100,20)
    GUICtrlCreateLabel("Titel:",120,475,100,20)
    GUICtrlCreateLabel("links:",200,50,30,20)
    GUICtrlCreateLabel("oben:",200,75,30,20)

    [/autoit] [autoit][/autoit] [autoit]

    $Start = GUICtrlCreateButton("erzeuge PDF",370,480,120,30)
    GUICtrlSetFont(-1,11,600)
    $Autor = GUICtrlCreateInput("",10,490,100,20)
    $Titel = GUICtrlCreateInput("",120,490,100,20)
    $Text = GUICtrlCreateEdit("Bitte geben sie hier Ihren Text ein.",10,120,480,345)
    $Schrift = GUICtrlCreateCombo("8",325,48,45,20)
    GUICtrlSetData(-1,"9|10|11|12|14|16|18|20|22|24|26|28|36|48|72","12")
    $Schriftart = GUICtrlCreateCombo("Times-Roman",380,48,100,20)
    GUICtrlSetData(-1,"Helvetica|Courier","Times-Roman")
    $Size = GUICtrlCreateCombo("A4",110,60,50,20)
    GUICtrlSetData(-1,"A3","A4")
    $Format = GUICtrlCreateRadio("Hochformat",20,50)
    GUICtrlSetState(-1,$GUI_CHECKED)
    $Rand_y = GUICtrlCreateInput("24",240,48,45,20)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1,999,0)
    $Rand_x = GUICtrlCreateInput("25",240,72,45,20)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1,999,0)
    $Fett = GUICtrlCreateCheckbox("Fett",325,73,35,20)
    $Kursiv = GUICtrlCreateCheckbox("Kursiv",370,73,60,20)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState ()
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    If $msg = $Start Then ExitLoop
    WEnd

    $Pfad = FileSaveDialog("Speichern",@DesktopDir,"PDF (*.pdf)",16)
    If StringRight($Pfad,4) = ".pdf" Then
    Else
    $Pfad = $Pfad & ".pdf"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Fett = GUICtrlRead($Fett)
    $Kursiv = GUICtrlRead($Kursiv)
    $Schriftart = GUICtrlRead($Schriftart)
    $Rand_x = GUICtrlRead($Rand_x)
    $Rand_y = GUICtrlRead($Rand_y)
    $Format = GUICtrlRead($Format)
    $Autor = GUICtrlRead($Autor)
    $Titel = GUICtrlRead($Titel)
    $Size = GUICtrlRead($Size)
    $Text = GUICtrlRead($Text)
    $Schrift = GUICtrlRead($Schrift)
    FileDelete($Pfad)
    $File = FileOpen($Pfad, 1)
    $Zeilen = 1

    [/autoit] [autoit][/autoit] [autoit]

    If $Size = "A4" Then
    $Size_x = 210
    $Size_y = 297
    ElseIf $Size = "A3" Then
    $Size_x = 297
    $Size_y = 420
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Fett = $GUI_CHECKED Or $Kursiv = $GUI_CHECKED Then
    If $Schriftart = "Times-Roman" Then
    If $Fett = $GUI_CHECKED Then
    $Schriftart = "Times-Bold"
    ElseIf $Kursiv = $GUI_CHECKED Then
    $Schriftart = "Times-Italic"
    EndIf
    If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart = "Times-BoldItalic"
    ElseIf $Schriftart = "Helvetica" Then
    If $Fett = $GUI_CHECKED Then
    $Schriftart = "Helvetica-Bold"
    ElseIf $Kursiv = $GUI_CHECKED Then
    $Schriftart = "Helvetica-Oblique"
    EndIf
    If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart = "Helvetica-BoldOblique"
    Else
    If $Fett = $GUI_CHECKED Then
    $Schriftart = "Courier-Bold"
    ElseIf $Kursiv = $GUI_CHECKED Then
    $Schriftart = "Courier-Oblique"
    EndIf
    If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart = "Courier-BoldOblique"
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Format = $GUI_UNCHECKED Then
    $Size = $Size_x
    $Size_x = $Size_y
    $Size_y = $Size
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $Schrift = 8 Then
    $Abstand = 9
    ElseIf $Schrift = 9 Then
    $Abstand = 11
    ElseIf $Schrift = 10 Then
    $Abstand = 12
    ElseIf $Schrift = 11 Then
    $Abstand = 13
    ElseIf $Schrift = 12 Then
    $Abstand = 15
    ElseIf $Schrift = 14 Then
    $Abstand = 17
    ElseIf $Schrift = 16 Then
    $Abstand = 19
    ElseIf $Schrift = 18 Then
    $Abstand = 21
    ElseIf $Schrift = 20 Then
    $Abstand = 24
    ElseIf $Schrift = 22 Then
    $Abstand = 26
    ElseIf $Schrift = 24 Then
    $Abstand = 28
    ElseIf $Schrift = 26 Then
    $Abstand = 30
    ElseIf $Schrift = 28 Then
    $Abstand = 32
    ElseIf $Schrift = 36 Then
    $Abstand = 41
    ElseIf $Schrift = 48 Then
    $Abstand = 55
    Else
    $Abstand = 83
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Not StringInStr($Text,@CRLF) = 0 Then
    $Text = StringSplit($Text,@CRLF)
    $Zeilen = $Text[0] / 2 + 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; Umrechnung
    $Wert = 2.834175
    $Size_y = Round($Size_y * $Wert)
    $Size_x = Round($Size_x * $Wert)
    $Rand_x = Round($Rand_x * $Wert)
    $Rand_y = Round($Rand_y * $Wert)

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"%PDF-1.2")
    FileWriteLine($File,"%âãÏÓ")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"1 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Author ("&$Autor&")")
    FileWriteLine($File,"/CreationDate (D:"&@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC&")")
    FileWriteLine($File,"/Creator (Ahnungslos)")
    FileWriteLine($File,"/Producer (Ahnungslos)")
    FileWriteLine($File,"/Title ("&$Titel&")")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"4 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Type /Font")
    FileWriteLine($File,"/Subtype /Type1")
    FileWriteLine($File,"/Name /F1")
    FileWriteLine($File,"/Encoding 5 0 R")
    FileWriteLine($File,"/BaseFont /"&$Schriftart)
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"5 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Type /Encoding")
    FileWriteLine($File,"/BaseEncoding /WinAnsiEncoding")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"6 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File," /Font << /F1 4 0 R >>")
    FileWriteLine($File," /ProcSet [ /PDF /Text ]")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"7 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Type /Page")
    FileWriteLine($File,"/Parent 3 0 R")
    FileWriteLine($File,"/Resources 6 0 R")
    FileWriteLine($File,"/Contents 8 0 R")
    FileWriteLine($File,"/Rotate 0")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"8 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Length 9 0 R")
    FileWriteLine($File,">>")
    FileWriteLine($File,"stream")
    FileWriteLine($File,"BT")

    If $Zeilen = 1 Then
    FileWriteLine($File,"/F1 "&$Schrift&" Tf")
    FileWriteLine($File,"1 0 0 1 "&$Rand_y&" "&$Size_y - $Rand_x - $Abstand&" Tm")
    FileWriteLine($File,"(Dies ist mein erster Text, und ich weiß gar nicht, was ich machen soll...) Tj")
    Else
    For $Counter = 1 To $Zeilen
    FileWriteLine($File,"/F1 "&$Schrift&" Tf")
    FileWriteLine($File,"1 0 0 1 "&$Rand_y&" "&$Size_y - $Rand_x - $Abstand * $Counter&" Tm")
    FileWriteLine($File,"("&$Text[$Counter * 2 - 1]&") Tj")
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"ET")
    FileWriteLine($File,"endstream")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"9 0 obj")
    FileWriteLine($File,"78")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"2 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Type /Catalog")
    FileWriteLine($File,"/Pages 3 0 R")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"3 0 obj")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Type /Pages")
    FileWriteLine($File,"/Count 1")
    FileWriteLine($File,"/MediaBox [ 0 0 "&$Size_x&" "&$Size_y&" ]")
    FileWriteLine($File,"/Kids [ 7 0 R ]")
    FileWriteLine($File,">>")
    FileWriteLine($File,"endobj")

    [/autoit] [autoit][/autoit] [autoit]

    FileWriteLine($File,"0 10")
    FileWriteLine($File,"0000000000 65535 f ")
    FileWriteLine($File,"0000000013 00000 n ")
    FileWriteLine($File,"0000000591 00000 n ")
    FileWriteLine($File,"0000000634 00000 n ")
    FileWriteLine($File,"0000000156 00000 n ")
    FileWriteLine($File,"0000000245 00000 n ")
    FileWriteLine($File,"0000000307 00000 n ")
    FileWriteLine($File,"0000000372 00000 n ")
    FileWriteLine($File,"0000000453 00000 n ")
    FileWriteLine($File,"0000000576 00000 n ")
    FileWriteLine($File,"trailer")
    FileWriteLine($File,"<<")
    FileWriteLine($File,"/Size 10")
    FileWriteLine($File,"/Root 2 0 R")
    FileWriteLine($File,"/Info 1 0 R")
    FileWriteLine($File,">>")
    FileWriteLine($File,"startxref")
    FileWriteLine($File,"712")
    FileWriteLine($File,"%%EOF")

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($File)

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Zitat

    Java mit iText ist meine grundsätzliche Empfehlung, damit kriegst du blitzsaubere PDFs raus.
    Ob und wie iText sich allerdings aus AutoIt heraus ansteuern lässt, weiß ich nicht...

    peethebee

    @pee du willst mich unbedingt noch zum Javajünger rekrutieren was?^^ Aber danke für den Vorschlag ich werds mir anschauen!

    Schnuffel
    Super script, ein guter start, jetzt muss ich nurnoch schauen wie ich sowas als tabelle hinbekomm, ein wenig spicken und dann bekomm ich es wohl raus :)

    Genau das hatte ich noch vergessen, Seite muss im Querformat sein, aber bei schnuffels script ist das ja ehh einstellbar...

    Sooo dann verschwinde ich mal ein paar Tage in meinem Loch und meld mich dann wieder wenn ich ein paar Ergebnisse vorzuweisen hab :thumbup:

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Okeeee, das mit den PDFs ist ein bisschen sehr krass o_O

    Ich habs in verschiedenen Sprachen gemacht die die Libaries schon drin haben:
    PHP
    VB.NET
    Itext (java)

    Fazit: mit einer vorhandenen Libary eig. alles kein Problem, ohne Libary SEEEEHR großes Problem, ausserdem scheinen die neueren Versionen eines PDF-Dokumentes verschlüsselt zu sein (also der text, nicht die formatierung)

    Ich hab noch ein bisschen rumgesucht und im englischen Forum eine PrintUDF gefunden mit der man unter anderem direkt linien Zeichnen kann(also leider keine Tabellen, aber mit linien & quadraten etc. kommt man schon sehr weit)

    Spoiler anzeigen
    [autoit]

    ;This is the script used to produce the graph in the example above.
    #include 'printMGv2.au3';the print UDF
    Global $hp
    Local $mmssgg,$marginx,$marginy
    $hp = _PrintDllStart($mmssgg);this must always be called first
    if $hp = 0 then
    consolewrite("Error from dllstart = " & $mmssgg & @CRLF)
    Exit
    endif

    [/autoit] [autoit][/autoit] [autoit]

    ;choose the printer if you don't want the default printer
    _PrintSetPrinter($hp);see also _PrinterSelectPrinter
    _PrintPageOrientation($hp,0);set landscape printing
    _PrintStartPrint($hp)
    $pght = _PrintGetpageheight($hp) - _PrintGetYOffset($hp)
    $pgwd = _PrintGetpageWidth($hp) - _PrintGetXOffset($hp)

    [/autoit] [autoit][/autoit] [autoit]

    $axisx = Round($pgwd * 0.8)
    $axisy = Round($pght * 0.8)
    _PrintSetFont($hp,'Arial',18,0,'bold,underline')
    $Title = "Sales for 2006"
    $tw = _PrintGetTextWidth($hp,$Title)
    $th = _PrintGetTextHeight($hp,$title)
    _PrintText($hp,$title,Int($pgwd/2 - $tw/2),_PrintGetYOffset($hp))
    _PrintSetLineWid($hp,2)
    _PrintSetLineCol($hp,0)
    _printsetfont($hp,'Times New Roman',12,0,'')
    $basey = 2*_PrintGetTextHeight($hp,"Jan")
    $basex = $basey + 200
    _PrintLine($hp,$basex,$pght - $basey,$axisx + $basex,$pght - $basey)
    _PrintLine($hp,$basex,$pght - $basey,$basex,$pght-$basey-$axisy)
    $xdiv = Int(($axisx - $basey)/12)
    $ydiv = Int($axisy/10)

    [/autoit] [autoit][/autoit] [autoit]

    $months = StringSplit("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sept|Oct|Nov|Dec",'|')
    For $n = 1 To 12
    _PrintText($hp,$months[$n],$basex + $n*$xdiv - Int(_printGetTextWidth($hp,$months[$n])/2),$pght-$basey + 5)
    _PrintLine($hp,$Basex + $n*$xdiv,$pght - $basey - 10,$Basex + $n*$xdiv,$pght - $basey + 10)

    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $n = 1 To 10
    _PrintText($hp,$n,$basex - _PrintGetTextWidth($hp,$n) - 20,$pght-$basey-$n*$ydiv-Int(_printGetTextHeight($hp,'10')/2))
    _PrintLIne($hp,$basex - 5,$pght - $basey - $n*$ydiv,$basex + 5,$pght - $basey - $n*$ydiv)

    Next

    [/autoit] [autoit][/autoit] [autoit]

    _PrintText($hp,"£ x 1000,000",$basex - 3 * _PrintGetTextHeight($hp,"£"),$pght - $basey - 100,90)
    Dim $sales[13] = [0,20,25,20,18,10,17,20,10,80,90,100,100]
    _PrintSetLineCol($hp,0x0000ff)
    _PrintSetBrushCol($hp,0x55FF55)
    For $n = 1 To 12
    _PrintRectangle($hp,$Basex + $n*$xdiv -50,$pght - $basey - Int($sales[$n]*$ydiv/10), _
    $Basex + $n*$xdiv +50,$pght - $basey - 0.2)
    Next

    $label = "I started work"
    _PrintSetLineCol($hp,0)
    _PrintLine($hp,Int($pgwd/2),2*$th + 125,$Basex + 8*$xdiv ,$pght - $basey - Int($sales[8]*$ydiv/10))
    _Printsetlinecol($hp,0x0000ff)
    _PrintSetLineWid($hp,10)
    _PrintSetBrushCol($hp,0xbbccee)

    [/autoit] [autoit][/autoit] [autoit]

    _PrintEllipse($hp,Int($pgwd/2) - 200,2*$th,Int($pgwd/2) + 200,2*$th + 250)
    ;add an image in next line. can be bmp, jpg or ico file
    ;_PrintImage($hp,"screenshot004.bmp",Int($pgwd/2) - 150,2*$th+260,300,350)

    [/autoit] [autoit][/autoit] [autoit]

    _PrintText($hp,$label,Int($pgwd/2 - _PrintGetTextWidth($hp,$label)/2),2*$th + 125 - Int(_printGetTextHeight($hp,$label)/2))

    [/autoit] [autoit][/autoit] [autoit]

    _PrintEndPrint($hp)
    _PrintNewPage($hp);Not really needed if no more pages to be printed
    _printDllClose($hp)

    [/autoit]

    >>>PrintUDF: http://www.autoitscript.com/forum/index.php?showtopic=51054

    So eine Libary (PDF) für AutoIt zu machen wäre sicherlich ein schönes Projekt und ich wäre gerne bereit da mitzumachen :)
    Hat noch wer lust?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    Einmal editiert, zuletzt von FireFlyer (10. Februar 2009 um 09:26)