Hallo Gemeinde,
ich bin auf ein sehr seltsames Verhalten aufmerksam geworden beim konvertieren einer Grafik und einer Textdatei in jeweils ein PDF.
Dazu benutze ich die Funktionen basierend auf der MPDF_UDF.au3 von Mihai Iancu(vielen dank dafür )
Wenn ich also in meinem Proggi zuerst die Grafikdatei und dann die Textdatei konvertiere alles gut. Konvertiere ich jedoch zuerst die Textdatei und dann die Grafikdatei wird es mirakulös :
besteht die Textdatei aus einer Seite(Din a 4) wird dann beim Kovertieren der Grafik diese 2 x in die erzeugte GrafikPDF eingefügt
besteht die Textdatei aus mehr Seiten wird in die "GrafikPDF" erst die Grafik eingefügt dann der Text oder je nach Anzahl Seiten Ausschnitte davon und dann nochmal die Grafik
Da in den beiden Funktionen aber keine gleich lautenden Variablen, Arrays, whatever benutzt werden, kann das meines Erachtens nur an der UDF liegen.
[tt]
Func _SelectImages()
Local $sImg = FileOpenDialog("Select images", "Dateipfad", "Images (*.jpg;*png)", 4)
If @error Then
MsgBox(4096, "", "No File(s) choosen")
Else
Local $aImgs = StringSplit($sImg, "|", 3)
;set the properties for the pdf
_SetTitle($sNameImg & "Img2PDF.pdf")
_SetSubject("Convert image(s) to pdf")
_SetKeywords("pdf, AutoIt")
;_OpenAfter(True) ;open after generation
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("a4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
;initialize the pdf
_InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Img2PDF.pdf")
If UBound($aImgs) <> 1 Then
;=== load resources used in pdf ===
For $i = 1 To UBound($aImgs) - 1
_LoadResImage("img" & $i, $aImgs[0] & "\" & $aImgs[$i])
Next
;load each image on it's own page
For $i = 1 To UBound($aImgs) - 1
_BeginPage()
;scale image to paper size!
_InsertImage("img" & $i, 2, 9, 17, 15)
_EndPage()
Next
Else
_LoadResImage("taietel", $aImgs[0])
_BeginPage()
;scale image to paper size!
_InsertImage("taietel", 2, 9, 17, 15)
_EndPage()
EndIf
;then, finally, write the buffer to disk
_ClosePDFFile()
Sleep(300)
GUICtrlSetData($EditSysNot, "HW-Summary-file is converted to pdf..." & @CRLF & @CRLF, 1)
EndIf
EndFunc ;==>_SelectImages
[/tt]
[tt]
Func _SelectBiosDump()
Local $idDelete = FileDelete(@AppDataDir & "\HS\" & $sNameImg & "Txt2Pdf.pdf")
Local $sF = FileOpenDialog("Choose a text file", "Dateipfad", "Text file (*.txt)", 1)
If @error Then
MsgBox(4096, "", "No File(s) chosen")
Else
;set the properties for the pdf
_SetTitle($sNameImg & "Txt2PDF")
_SetSubject("Convert text file to pdf")
_SetKeywords("pdf, AutoIt")
;_OpenAfter(True) ;open after generation
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
;initialize the pdf
_InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Txt2Pdf.pdf")
_LoadFontTT("F1", $PDF_FONT_Arial, $PDF_FONT_Normal)
_Txt2PDF($sF, "F1")
;write the buffer to disk
_ClosePDFFile()
Sleep(300)
$sF = ""
GUICtrlSetData($EditSysNot, "BIOS-dump-file is converted to pdf..." & @CRLF & @CRLF, 1)
EndIf
EndFunc ;==>_SelectBiosDump
; #FUNCTION# ====================================================================================================================
; Name ..........: _Txt2PDF
; Description ...: Convert a text file to pdf
; Syntax ........: _Txt2PDF( $sText , $sFontAlias )
; Parameters ....: $sText - file path.
; $sFontAlias - font alias.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......: If the string is very long, it will be scaled to paper width
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _Txt2PDF($sFile, $sFontAlias)
Local $hFile = FileOpen($sFile)
Local $sText = FileRead($hFile)
FileClose($hFile)
Local $iUnit = Ceiling(_GetUnit())
Local $iX = 2
Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5
Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX
Local $iWidth = Ceiling($iPagina - $iX) ;, 1)
Local $lScale
Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3)
Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit))
Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY)
Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages - 2)
Local $nrp
;MsgBox(0, "Pages", $iPages)
For $j = 0 To $iPages - 1
;For $j = 0 To $iPages + 2
$nrp = _BeginPage()
_DrawText(_GetPageWidth() / _GetUnit() - 1, 1, $nrp, "F1", 10, $PDF_ALIGN_CENTER)
For $i = 0 To $iNrRanduri - 1
Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10))
Local $iH = $iY - $iHR * ($i + 1)
Select
Case $iH < 1
_EndPage()
Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1
_EndPage()
Return
Case $sLength > $iWidth - 1
$lScale = Ceiling($iWidth * 100 / $sLength)
_SetTextHorizontalScaling($lScale)
_DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
_SetTextHorizontalScaling(100)
Case Else
_DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
EndSelect
Next
_EndPage()
Next
EndFunc ;==>_Txt2PDF
[/tt]
Alles anzeigen
Die beiden Funktkionen werden in der GUI per Buttonklick ausgelöst.
Weiss jemand wie es zu dem Verhalten kommt und wie man das korrigieren kann?
Und kann mir jemand erklären woran es liegt, dass die Text-Konvertierung fast nie die ganze Seite füllt, sondern nach ca. 2 drittel der Seite eine neue Seite anfängt? Manchmal wird auch die erste Seite wiederholt....
ich habe ausser die Pfadangaben, die MsgBoxen und die GuiCtrlSetdata-Anagaben an dem bereitgestelltem Code nichts weiter verändert. Achja: die Variable $NameImg beinhaltet nur eine Zahl die an den Dateinamen gehängt wird, da es sein kann, das mehrere Txt/Grafik-Dateien zu konvertieren sind, die ich dann später jeweils einer anderen PDF zuordne um diese drei dann zu mergen.