Что нового

[Документы] Печать книгой

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Re: Печать книгой

Вот для способа "2 страницы на развороте"
Код:
#include <Array.au3>

$aSource = _GetRangeNumbersArray('1-9')
_ArrayDisplay($aSource)
Dim $iAdd = 0
If Mod($aSource[0], 4) Then ; проверка "разбиваемости" страниц в блок по 4
	$iAdd = 4 - Mod($aSource[0], 4)
EndIf
ReDim $aSource[UBound($aSource) + $iAdd] ; корректировка, если страниц мало
$aSource[0] = UBound($aSource) - 1
For $i = UBound($aSource) - $iAdd To UBound($aSource) - 1 ; обзываем недостающие страницы
	$aSource[$i] = 'bulk'
Next
_ArrayDisplay($aSource)
Dim $aResult[$aSource[0]/4][2], $iCounter = 0
For $i = 1 To $aSource[0]/2 Step 2 ; заполнение выходного массива парами страниц
	$aResult[$iCounter][0] = $aSource[$i] & '-' & $aSource[$aSource[0] - $iCounter*2] ; левый столбец - лицевые
	$aResult[$iCounter][1] = $aSource[$i + 1] & '-' & $aSource[$aSource[0] - $iCounter*2 - 1] ; правый - оборотка
	$iCounter += 1
Next

_ArrayDisplay($aResult)

Func _GetRangeNumbersArray($sString, $sStr_Delim = ",", $sRange_Delim = "-")
    Local $aStr_Split = StringSplit($sString, $sStr_Delim)
    Local $aRetArr[1], $aRange_Split, $iFor, $iTo

    For $i = 1 To $aStr_Split[0]
        If StringInStr($aStr_Split[$i], $sRange_Delim) Then
            $aRange_Split = StringSplit($aStr_Split[$i], $sRange_Delim)

            $iFor = Number($aRange_Split[1])
            $iTo = Number($aRange_Split[$aRange_Split[0]])

            For $j = $iFor To $iTo ;От первого к последнему
                $aRetArr[0] += 1
                ReDim $aRetArr[$aRetArr[0] + 1]

                $aRetArr[$aRetArr[0]] = $j
            Next
        Else
            $aRetArr[0] += 1
            ReDim $aRetArr[$aRetArr[0] + 1]

            $aRetArr[$aRetArr[0]] = $aStr_Split[$i]
        EndIf
    Next

    Return $aRetArr

EndFunc   ;==>_GetRangeNumbersArray
Код нужно комментировать, а переменные и функции называть внятно, иначе мало кто захочет копаться в вашем коде.
 
Верх