Rasterbator Clone - Erstellen von riesigen Postern

  • Inspiriert von Rasterbator, der Software zum erstellen von riesigen Postern http://homokaasu.org/rasterbator
    hab ich eine eigene Version geschrieben.
    Zum erstellen der Pdf verwende ich Haru Free PDF Library http://libharu.sourceforge.net (ist im Anhang dabei)

    Das Programm erstellt Halbtonbilder aus Bilddateien und teilt es auf mehrere Papierseiten auf.
    So kann man ein Foto auf z.b. 5x4 A4-Seiten ausdrucken und so ein Poster von etwa 1m² erstellen.
    Bei mehr Seiten etsprechend größer...

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlusConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <Misc.au3>
    #include <GDIPlus.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)

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

    Global $libhpdfdll = DllOpen(@ScriptDir & "\libhpdf.dll")
    If $libhpdfdll = -1 Then
    MsgBox(0, "ERROR", "Error loading libhpdf.dll")
    Exit
    EndIf

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

    Global $hImage, $iWidth, $iHeight, $iImageX, $iImageY, $iImageW, $iImageH, $iImageS, $CustomColor = 0xFF0000

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

    _GDIPlus_Startup()
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)

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

    Global $hGui = GUICreate("Autoit Rasterbator Clone by Eukalyptus", 400, 685)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUICtrlCreateButton("Load Source Image", 10, 10, 120, 20)
    GUICtrlSetOnEvent(-1, "_LoadImage")
    GUICtrlCreateLabel("", 10, 35, 380, 280)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("PaperSize:", 10, 333, 50, 20)
    Global $hPaperWidth = GUICtrlCreateInput("210", 70, 330, 40, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "_ReDrawPreview")
    GUICtrlCreateLabel("x", 115, 333, 10, 20)
    Global $hPaperHeight = GUICtrlCreateInput("297", 130, 330, 40, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "_ReDrawPreview")
    GUICtrlCreateLabel("mm", 175, 333, 20, 20)
    GUICtrlCreateCombo("", 210, 330, 180, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetOnEvent(-1, "_SetPaperSize")
    GUICtrlSetData(-1, "US LETTER PORTRAIT|US LETTER LANDSCAPE|US LEGAL PORTRAIT|US LEGAL LANDSCAPE|A3 PORTRAIT|A3 LANDSCAPE|A4 PORTRAIT|A4 LANDSCAPE|A5 PORTRAIT|A5 LANDSCAPE", "A4 PORTRAIT")
    Global $hPaperCount = GUICtrlCreateInput("5", 100, 365, 35, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "_ReDrawPreview")
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 50, 1)
    GUICtrlCreateLabel("Sheets /", 145, 368, 50, 20)
    Global $hPaperCountDir = GUICtrlCreateCombo("", 200, 365, 60, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetOnEvent(-1, "_ReDrawPreview")
    GUICtrlSetData(-1, "Width|Height", "Width")
    GUICtrlCreateLabel("OutputSize: ", 10, 368, 60, 20)
    Global $hOutPutSize = GUICtrlCreateLabel("", 80, 393, 300, 20)
    GUICtrlCreateLabel("Optional Scale to Papersize:", 10, 428, 140, 20)
    Global $hScale = GUICtrlCreateSlider(160, 415, 150, 30, BitOR($TBS_LEFT, $TBS_AUTOTICKS))
    GUICtrlSetOnEvent(-1, "_SetScale")
    GUICtrlSetLimit(-1, 100, 10)
    GUICtrlSendMsg(-1, $TBM_SETTICFREQ, 10, 0)
    GUICtrlSetData(-1, 90)
    Global $hScaleInfo = GUICtrlCreateLabel("0.9", 330, 428, 50, 20)
    GUICtrlCreateLabel("DotSize:", 10, 463, 50, 20)
    Global $hDotSize = GUICtrlCreateInput("5", 100, 460, 35, 20, $ES_NUMBER)
    GUICtrlCreateUpdown(-1)
    GUICtrlSetLimit(-1, 50, 1)
    GUICtrlCreateLabel("mm", 140, 465, 50, 20)
    Global $hOutline = GUICtrlCreateCheckbox("Draw Outline", 200, 460, 100, 20)
    GUICtrlCreateLabel("DotColor:", 10, 498, 50, 20)
    GUIStartGroup()
    Global $hColorBlack = GUICtrlCreateRadio("Black", 100, 495, 50, 20)
    Global $hColorCustom = GUICtrlCreateRadio("Custom:", 100, 520, 60, 20)
    Global $hColorMulti = GUICtrlCreateRadio("Original Colors", 100, 545, 100, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    Global $hCustomColor = GUICtrlCreateLabel("", 180, 520, 30, 20)
    GUICtrlSetBkColor(-1, 0xFF0000)
    GUICtrlCreateButton("Select Color", 230, 521, 80, 18)
    GUICtrlSetOnEvent(-1, "_SelectColor")
    GUICtrlCreateLabel("Output File:", 10, 583, 80, 20)
    Global $hOutputFile = GUICtrlCreateInput("", 100, 580, 290, 20)
    GUICtrlCreateButton("Rasterbate", 150, 615, 100, 30)
    GUICtrlSetOnEvent(-1, "_Rasterbate")
    Global $hProgress = GUICtrlCreateProgress(10, 655, 380, 20)
    GUISetState()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    GUIRegisterMsg($WM_PAINT, "_WM_PAINT")
    GUIRegisterMsg($WM_ACTIVATE, "_WM_ACTIVATE")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _LoadImage()
    Local $sFilename, $sPdfFile, $Cnt = 0
    $sFilename = FileOpenDialog("Select Image...", @WorkingDir, "(*.bmp;*.jpg;*.tif)", 1)
    If @error Then Return
    $hImage = _GDIPlus_ImageLoadFromFile($sFilename)
    If @error Then Return
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)
    If 380 / $iWidth < 280 / $iHeight Then
    $iImageS = 380 / $iWidth
    Else
    $iImageS = 280 / $iHeight
    EndIf
    $iImageW = $iWidth * $iImageS
    $iImageH = $iHeight * $iImageS
    $iImageX = 200 - $iImageW / 2
    $iImageY = 175 - $iImageH / 2
    $sPdfFile = StringLeft($sFilename, StringInStr($sFilename, ".", 0, -1) - 1)
    If FileExists($sPdfFile & ".pdf") Then
    While 1
    $Cnt += 1
    If FileExists($sPdfFile & "_" & String($Cnt) & ".pdf") = 0 Then ExitLoop
    WEnd
    GUICtrlSetData($hOutputFile, $sPdfFile & "_" & String($Cnt) & ".pdf")
    Else
    GUICtrlSetData($hOutputFile, $sPdfFile & ".pdf")
    EndIf
    _ReDrawPreview()
    EndFunc ;==>_LoadImage

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

    Func _SetScale()
    GUICtrlSetData($hScaleInfo, GUICtrlRead($hScale) / 100)
    EndFunc ;==>_SetScale

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

    Func _ReDrawPreview()
    _WM_Paint($hGui, 0, 0, 0)
    EndFunc ;==>_ReDrawPreview

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

    Func _SelectColor()
    Local $Color
    $Color = _ChooseColor(2, $CustomColor, 2, $hGui)
    If @error Then Return
    $CustomColor = $Color
    If $CustomColor = 0xFFFFFF Then $CustomColor -= 0x000001
    GUICtrlSetBkColor($hCustomColor, $CustomColor)
    GUICtrlSetState($hColorCustom, $GUI_CHECKED)
    EndFunc ;==>_SelectColor

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

    Func _WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    If $hImage = 0 Then Return
    Local $iPageW = _mm2px(GUICtrlRead($hPaperWidth))
    Local $iPageH = _mm2px(GUICtrlRead($hPaperHeight))
    Local $iPageC = GUICtrlRead($hPaperCount)
    Local $iPageCX, $iPageCY
    _GDIPlus_GraphicsFillRect($hGraphics, 10, 35, 380, 280, $hBrush)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $iImageX, $iImageY, $iImageW, $iImageH)
    Switch GUICtrlRead($hPaperCountDir)
    Case "Width"
    $iPageCX = $iWidth / $iPageC
    $iPageCY = $iWidth / $iPageC * $iPageH / $iPageW
    Case Else
    $iPageCY = $iHeight / $iPageC
    $iPageCX = $iHeight / $iPageC * $iPageW / $iPageH
    EndSwitch
    For $i = 0 To $iWidth Step Round($iPageCX)
    _GDIPlus_GraphicsDrawLine($hGraphics, $iImageX + $i * $iImageS, $iImageY, $iImageX + $i * $iImageS, $iImageY + $iImageH)
    Next
    For $j = 0 To $iHeight Step Round($iPageCY)
    _GDIPlus_GraphicsDrawLine($hGraphics, $iImageX, $iImageY + $j * $iImageS, $iImageX + $iImageW, $iImageY + $j * $iImageS)
    Next
    $iPageCX = Ceiling($iWidth / $iPageCX)
    $iPageCY = Ceiling($iHeight / $iPageCY)
    GUICtrlSetData($hOutPutSize, $iPageCX & " x " & $iPageCY & " = " & $iPageCX * $iPageCY & " sheets Size: " & _px2mm($iPageW * $iPageCX) & "mm x " & _px2mm($iPageH * $iPageCY) & "mm")
    EndFunc ;==>_WM_PAINT

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

    Func _WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
    Sleep(10)
    _ReDrawPreview()
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_ACTIVATE

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

    Func _SetPaperSize()
    Local $iX = GUICtrlRead($hPaperWidth), $iY = GUICtrlRead($hPaperHeight)
    Switch GUICtrlRead(@GUI_CtrlId)
    Case "US LETTER PORTRAIT"
    $iX = 216
    $iY = 279
    Case "US LETTER LANDSCAPE"
    $iX = 279
    $iY = 216
    Case "US LEGAL PORTRAIT"
    $iX = 216
    $iY = 355
    Case "US LEGAL LANDSCAPE"
    $iX = 355
    $iY = 216
    Case "A3 PORTRAIT"
    $iX = 297
    $iY = 420
    Case "A3 LANDSCAPE"
    $iX = 420
    $iY = 297
    Case "A4 PORTRAIT"
    $iX = 210
    $iY = 297
    Case "A4 LANDSCAPE"
    $iX = 297
    $iY = 210
    Case "A5 PORTRAIT"
    $iX = 148
    $iY = 210
    Case "A5 LANDSCAPE"
    $iX = 210
    $iY = 148
    EndSwitch
    GUICtrlSetData($hPaperWidth, $iX)
    GUICtrlSetData($hPaperHeight, $iY)
    _ReDrawPreview()
    EndFunc ;==>_SetPaperSize

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

    Func _mm2px($imm)
    Return Round($imm * 72 / 25.4)
    EndFunc ;==>_mm2px

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

    Func _px2mm($imm)
    Return Round($imm * 25.4 / 72, 1)
    EndFunc ;==>_px2mm

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

    Func _Rasterbate()
    If $hImage = 0 Then Return
    Opt("GUIOnEventMode", 0)
    Local $iDotSize = GUICtrlRead($hDotSize)
    Local $iPageW = _mm2px(GUICtrlRead($hPaperWidth))
    Local $iPageH = _mm2px(GUICtrlRead($hPaperHeight))
    Local $iPageC = GUICtrlRead($hPaperCount)
    Local $iPageDir = 0
    If GUICtrlRead($hPaperCountDir) = "Height" Then $iPageDir = 1
    Local $Color = $CustomColor
    If GUICtrlRead($hColorBlack) = 1 Then $Color = 0x000000
    If GUICtrlRead($hColorMulti) = 1 Then $Color = 0xFFFFFF
    Local $bOutLine = False
    If GUICtrlRead($hOutline) = 1 Then $bOutLine = True
    Local $sPdfFile = GUICtrlRead($hOutputFile)
    Local $nScale = GUICtrlRead($hScale) / 100
    Local $hPdf = _HPDF_New()
    _Rasterize($hPdf, $iPageW, $iPageH, $hImage, $iWidth, $iHeight, $iPageC, $iPageDir, $nScale, $iDotSize, $Color, $bOutLine, $hProgress)
    _HPDF_SaveToFile($hPdf, $sPdfFile)
    _HPDF_Free($hPdf)
    GUICtrlSetData($hProgress, 0)
    Opt("GUIOnEventMode", 1)
    WinActivate($hGui)
    EndFunc ;==>_Rasterbate

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

    Func _Rasterize($hPdf, $iPageW, $iPageH, $hBitmap, $iWidth, $iHeight, $iStep, $iDir, $nScale, $iRaster, $Color, $bOutLine = False, $hProgress = 0)
    $iRaster = $iRaster * 72 / 25.4
    Switch $iDir
    Case 0
    $iRaster = $iRaster / ($iStep * $iPageW / $iWidth)
    Case Else
    $iRaster = $iRaster / ($iStep * $iPageH / $iHeight)
    EndSwitch
    Local $BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iWidth, $iHeight, $GDIP_ILMREAD, $GDIP_PXF24RGB)
    Local $Stride = DllStructGetData($BitmapData, "Stride")
    Local $Width = DllStructGetData($BitmapData, "Width")
    Local $Height = DllStructGetData($BitmapData, "Height")
    Local $PixelFormat = DllStructGetData($BitmapData, "PixelFormat")
    Local $Scan0 = DllStructGetData($BitmapData, "Scan0")
    Local $pPixels = $Scan0
    Local $SquareX = Ceiling($Width / $iRaster), $SquareY = Ceiling($Height / $iRaster)
    Local $Row, $Col, $Cnt = 0, $Luma = 0, $Red, $Green, $Blue, $Size, $iRRaster = Ceiling($iRaster)
    Local $PixelData = DllStructCreate("ubyte lData[" & (Abs($Stride) * $Height - 1) & "]", $Scan0)
    Local $iStepW, $iStepH, $nPageScale = 1, $hPage, $iStepPageX, $iStepPageY
    Local $iPageCnt, $iPageDone = 0
    Switch $iDir
    Case 0
    $iStepW = Ceiling($SquareX / $iStep)
    $iStepH = Ceiling($SquareX / $iStep * $iPageH / $iPageW)
    $iStepPageX = Ceiling(($Width / $iRaster) / $iStepW)
    $iStepPageY = Ceiling(($Height / $iRaster) / $iStepH)
    Case 1
    $iStepH = Ceiling($SquareY / $iStep)
    $iStepW = Ceiling($SquareY / $iStep * $iPageW / $iPageH)
    $iStepPageX = Ceiling(($Width / $iRaster) / $iStepW)
    $iStepPageY = Ceiling(($Height / $iRaster) / $iStepH)
    EndSwitch
    If $iPageH / ($iStepH * $iRaster) < $iPageW / ($iStepW * $iRaster) Then
    $nPageScale = $iPageH / ($iStepH * $iRaster)
    Else
    $nPageScale = $iPageW / ($iStepW * $iRaster)
    EndIf
    $iPageCnt = $iStepPageX * $iStepPageY
    For $iStepY = 0 To $iStepPageY - 1
    For $iStepX = 0 To $iStepPageX - 1
    $hPage = _HPDF_AddPage($hPdf)
    _HPDF_Page_SetWidth($hPage, $iPageW)
    _HPDF_Page_SetHeight($hPage, $iPageH)
    _HPDF_Page_SetRotate($hPage, 180)
    _HPDF_Page_Concat($hPage, -1 * $nScale, 0, 0, 1 * $nScale, $iPageW - ($iPageW * (1 - $nScale) / 2), $iPageH * (1 - $nScale) / 2)
    _HPDF_Page_SetLineWidth($hPage, 0)
    For $iPosY = -1 To $iStepH
    GUICtrlSetData($hProgress, Round($iPageDone * 100 / $iPageCnt + ($iPosY * 100 / $iStepH) / $iPageCnt))
    If $iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $iRaster > $Height Then ExitLoop
    If $iStepY * $iStepH * $iRaster + $iPosY * $iRaster < 0 Then ContinueLoop
    For $iPosX = -1 To $iStepW
    If $iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $iRaster > $Width Then ExitLoop
    If $iStepX * $iStepW * $iRaster + $iPosX * $iRaster < 0 Then ContinueLoop
    $Luma = 0
    $Cnt = 0
    $Red = 0
    $Green = 0
    $Blue = 0
    For $Row = 0 To $iRRaster - 1
    For $Col = 0 To $iRRaster - 1
    Switch $Color
    Case 0xFFFFFF
    $Red += DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 3)
    $Green += DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 2)
    $Blue += DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 1)
    Case Else
    $Red = DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 3)
    $Green = DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 2)
    $Blue = DllStructGetData($PixelData, 1, Round($iStepY * $iStepH * $iRaster + $iPosY * $iRaster + $Row) * $Stride + Round($iStepX * $iStepW * $iRaster + $iPosX * $iRaster + $Col) * 3 + 1)
    $Luma += $Red * 0.3 + $Green * 0.59 + $Blue * 0.11
    EndSwitch
    $Cnt += 1
    Next
    Next
    Switch $Color
    Case 0xFFFFFF
    $Luma = $Red * 0.3 + $Green * 0.59 + $Blue * 0.11
    $Size = ((0xFF - ($Luma / $Cnt)) * $iRaster / 0xAF)
    _WritePdfData($hPage, ($iPosX * $iRaster + $iRaster / 2) * $nPageScale, ($iPosY * $iRaster + $iRaster / 2) * $nPageScale, $Size * $nPageScale, $Red / $Cnt / 0xFF, $Green / $Cnt / 0xFF, $Blue / $Cnt / 0xFF)
    Case Else
    $Size = ((0xFF - ($Luma / $Cnt)) * $iRaster / 0xAF)
    _WritePdfData($hPage, ($iPosX * $iRaster + $iRaster / 2) * $nPageScale, ($iPosY * $iRaster + $iRaster / 2) * $nPageScale, $Size * $nPageScale, BitAND(BitShift($Color, 16), 0xFF) / 0xFF, BitAND(BitShift($Color, 8), 0xFF) / 0xFF, BitAND($Color, 0xFF) / 0xFF)
    EndSwitch
    Next
    Next
    If $iStepY > 0 Or $iStepY < $iStepPageY - 1 Or $iStepX > 0 Or $iStepX < $iStepPageX - 1 Then _HPDF_Page_SetRGBFill($hPage, 1, 1, 1)
    If $iStepY > 0 Then _HPDF_Page_Rectangle($hPage, -$iRaster * 2 * $nPageScale, -$iRaster * 2 * $nPageScale, ($iStepW * $iRaster + $iRaster * 4) * $nPageScale, $iRaster * 2 * $nPageScale)
    If $iStepY < $iStepPageY - 1 Then _HPDF_Page_Rectangle($hPage, -$iRaster * 2 * $nPageScale, $iStepH * $iRaster * $nPageScale, ($iStepW * $iRaster + $iRaster * 4) * $nPageScale, $iRaster * 2 * $nPageScale)
    If $iStepX > 0 Then _HPDF_Page_Rectangle($hPage, -$iRaster * 2 * $nPageScale, -$iRaster * 2 * $nPageScale, $iRaster * 2 * $nPageScale, ($iStepH * $iRaster + $iRaster * 4) * $nPageScale)
    If $iStepX < $iStepPageX - 1 Then _HPDF_Page_Rectangle($hPage, $iStepW * $iRaster * $nPageScale, -$iRaster * 2 * $nPageScale, $iRaster * 2 * $nPageScale, ($iStepH * $iRaster + $iRaster * 4) * $nPageScale)
    If $iStepY > 0 Or $iStepY < $iStepPageY - 1 Or $iStepX > 0 Or $iStepX < $iStepPageX - 1 Then _HPDF_Page_Fill($hPage)
    If $bOutLine = True Then
    If $iStepX > 0 Then _DrawLineVertikal($hPage, 0, 0, $iStepH * $iRaster * $nPageScale)
    If $iStepX < $iStepPageX - 1 Then _DrawLineVertikal($hPage, $iStepW * $iRaster * $nPageScale, 0, $iStepH * $iRaster * $nPageScale)
    If $iStepY > 0 Then _DrawLineHorizontal($hPage, 0, 0, $iStepW * $iRaster * $nPageScale)
    If $iStepY < $iStepPageY - 1 Then _DrawLineHorizontal($hPage, 0, $iStepH * $iRaster * $nPageScale, $iStepW * $iRaster * $nPageScale)
    EndIf
    $iPageDone += 1
    Next
    Next
    GUICtrlSetData($hProgress, 100)
    _GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
    EndFunc ;==>_Rasterize

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

    Func _WritePdfData($hPage, $iX, $iY, $iD, $nR, $nG, $nB)
    _HPDF_Page_SetRGBFill($hPage, $nR, $nG, $nB)
    _HPDF_Page_Circle($hPage, $iX, $iY, $iD / 2)
    _HPDF_Page_Fill($hPage)
    EndFunc ;==>_WritePdfData

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

    Func _DrawLineHorizontal($hPage, $iX, $iY, $iW)
    Local $j
    For $i = $iX To $iW Step 10
    $j = $i
    If $j > $iW - 10 Then $j = $iW - 10
    _HPDF_Page_SetRGBStroke($hPage, 1, 1, 0)
    _HPDF_Page_MoveTo($hPage, $j, $iY)
    _HPDF_Page_LineTo($hPage, $j + 5, $iY)
    _HPDF_Page_Stroke($hPage)
    _HPDF_Page_SetRGBStroke($hPage, 0, 0, 0)
    _HPDF_Page_MoveTo($hPage, $j + 5, $iY)
    _HPDF_Page_LineTo($hPage, $j + 10, $iY)
    _HPDF_Page_Stroke($hPage)
    Next
    EndFunc ;==>_DrawLineHorizontal

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

    Func _DrawLineVertikal($hPage, $iX, $iY, $iW)
    Local $j
    For $i = $iY To $iW Step 10
    $j = $i
    If $j > $iW - 10 Then $j = $iW - 10
    _HPDF_Page_SetRGBStroke($hPage, 1, 1, 0)
    _HPDF_Page_MoveTo($hPage, $iX, $j)
    _HPDF_Page_LineTo($hPage, $iX, $j + 5)
    _HPDF_Page_Stroke($hPage)
    _HPDF_Page_SetRGBStroke($hPage, 0, 0, 0)
    _HPDF_Page_MoveTo($hPage, $iX, $j + 5)
    _HPDF_Page_LineTo($hPage, $iX, $j + 10)
    _HPDF_Page_Stroke($hPage)
    Next
    EndFunc ;==>_DrawLineVertikal

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

    Func _HPDF_Page_SetRotate($hPage, $iAngle)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetRotate", "ptr", $hPage, "uint", $iAngle)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetRotate

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

    Func _HPDF_Page_Concat($hPage, $a, $b, $c, $d, $X, $Y)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_Concat", "ptr", $hPage, "float", $a, "float", $b, "float", $c, "float", $d, "float", $X, "float", $Y)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_Concat

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

    Func _HPDF_SetPageMode($hPage, $iMode)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_SetPageMode", "ptr", $hPage, "dword", $iMode)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_SetPageMode

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

    Func _HPDF_Page_Stroke($hPage)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_Stroke", "ptr", $hPage)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_Stroke

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

    Func _HPDF_Page_SetRGBStroke($hPage, $nRed, $nGreen, $nBlue)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetRGBStroke", "ptr", $hPage, "float", $nRed, "float", $nGreen, "float", $nBlue)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetRGBStroke

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

    Func _HPDF_Page_Fill($hPage)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_Fill", "ptr", $hPage)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_Fill

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

    Func _HPDF_Page_SetRGBFill($hPage, $nRed, $nGreen, $nBlue)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetRGBFill", "ptr", $hPage, "float", $nRed, "float", $nGreen, "float", $nBlue)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetRGBFill

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

    Func _HPDF_Page_MoveTo($hPage, $nX, $nY)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_MoveTo", "ptr", $hPage, "float", $nX, "float", $nY)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_MoveTo

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

    Func _HPDF_Page_LineTo($hPage, $nX, $nY)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_LineTo", "ptr", $hPage, "float", $nX, "float", $nY)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_LineTo

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

    Func _HPDF_Page_SetLineWidth($hPage, $nW)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetLineWidth", "ptr", $hPage, "float", $nW)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetLineWidth

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

    Func _HPDF_Page_Rectangle($hPage, $nX, $nY, $nW, $nH)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_Rectangle", "ptr", $hPage, "float", $nX, "float", $nY, "float", $nW, "float", $nH)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_Rectangle

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

    Func _HPDF_Page_Circle($hPage, $nX, $nY, $nRadius)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_Circle", "ptr", $hPage, "float", $nX, "float", $nY, "float", $nRadius)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_Circle

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

    Func _HPDF_Page_SetWidth($hPage, $nWidth)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetWidth", "ptr", $hPage, "float", $nWidth)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetWidth

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

    Func _HPDF_Page_SetHeight($hPage, $nHeight)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetHeight", "ptr", $hPage, "float", $nHeight)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetHeight

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

    Func _HPDF_Page_SetSize($hPage, $iSize, $iDirection)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Page_SetSize", "ptr", $hPage, "dword", $iSize, "dword", $iDirection)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Page_SetSize

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

    Func _HPDF_Free($hPdf)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_Free", "ptr", $hPdf)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_Free

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

    Func _HPDF_AddPage($hPdf)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_AddPage", "ptr", $hPdf)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_AddPage

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

    Func _HPDF_SaveToFile($hPdf, $sFilename)
    Local $aReturn
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_SaveToFile", "ptr", $hPdf, "str", $sFilename)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_SaveToFile

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

    Func _HPDF_New()
    Local $aReturn
    Local $error_handler = DllStructCreate("ulong error_no;ulong detail_no;ptr* user_data")
    $aReturn = DllCall($libhpdfdll, "int", "HPDF_New", "ptr", $error_handler, "ptr", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aReturn[0]
    EndFunc ;==>_HPDF_New

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

    Func _Exit()
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Viel Vergnügen!
    lgE

  • Schöne Sache :thumbup:

    Eine Schande das noch nie jemand darauf geanwortet hat ^^

    mfg Ubuntu

  • Stimmt, das hab ich damals glatt übersehen. Kann ich bestimmt mal brauchen.

    PS: Du kannst auch mal die PDF-UDFs getrennt veröffentlichen, das ist bestimmt auch für andere nützlich

  • Also ich blaettere jeden Tag die ganzen Seiten von scripte durch und es war nie da. Dabei haette ich es letzte Woche echt gebraucht. Trotzdem ganz grosses Lob! :)