;The following code creates pdf files version 1.2 (Acrobat 3.x). Global Position.l, pageNo.l, lineNo.l Global Dim location.l(5000) Global Dim pageObj.l(5000) Global lines.l, obj.l, Tpages.l, encoding.l, resources.l, pages.l, pointSize.q Global vertSpace.d, info.l, root.l, npagex.d, npagey.l, linelen.l, cache.s Global FileTXT.s, FilePDF.s Global AppName.s, Author.s, Creator.s, Keywords.s, Subject.s, Title.s, BaseFont.s, rotate.l, pageWidth.d, pageHeight.d Declare.l StartPage() Declare.s endpage(streamstart.l) Procedure writepdf(stre.s, flush.l=0) Position + Len(stre) cache + stre + Chr(13) If Len(cache) > 32000 Or flush > 0 OpenFile(0, FilePDF) FileSeek(0, Lof(0)) WriteStringN(0, cache) CloseFile(0) cache = "" EndIf EndProcedure Procedure WriteStart() writepdf ("%PDF-1.2") writepdf ("%âãÏÓ") EndProcedure Procedure WriteHead() CreationDate.s = "D:" + FormatDate( "%YYYY%MM%DD%HH%II%SS",Date()) obj + 1 location(obj) = Position info = obj writepdf (Str(obj) + " 0 obj") writepdf ("<<") writepdf ("/Author (" + Author + ")") writepdf ("/CreationDate (" + CreationDate + ")") writepdf ("/Creator (" + Creator + ")") writepdf ("/Producer (" + AppName + ")") writepdf ("/Title (" + Title + ")") writepdf ("/Subject (" + Subject + ")") writepdf ("/Keywords (" + Keywords + ")") writepdf (">>") writepdf ("endobj") obj + 1 root = obj obj + 1 Tpages = obj encoding = obj + 2 resources = obj + 3 obj + 1 location(obj) = Position writepdf (Str(obj) + " 0 obj") writepdf ("<<") writepdf ("/Type /Font") writepdf ("/Subtype /Type1") writepdf ("/Name /F1") writepdf ("/Encoding " + Str(encoding) + " 0 R") writepdf ("/BaseFont /" + BaseFont) writepdf (">>") writepdf ("endobj") obj + 1 location(obj) = Position writepdf (Str(obj) + " 0 obj") writepdf ("<<") writepdf ("/Type /Encoding") writepdf ("/BaseEncoding /Symbol-Set") writepdf (">>") writepdf ("endobj") obj + 1 location(obj) = Position writepdf (Str(obj) + " 0 obj") writepdf ("<<") writepdf (" /Font << /F1 " + Str(obj - 2) + " 0 R >>") writepdf (" /ProcSet [ /PDF /Text ]") writepdf (">>") writepdf ("endobj") EndProcedure Procedure WritePages() line.s: tmpline.s: beginstream.l If ReadFile(1, FileTXT) beginstream = StartPage() lineNo = -1 While Not Eof(1) line = ReadString(1) lineNo + 1 ;page Break If lineNo >= lines Or FindString(line, Chr(12),1) > 0 writepdf("1 0 0 1 " + Str(npagex) + " " + Str(npagey) + " Tm") writepdf("(" + Str(pageNo) + ") Tj") writepdf("/F1 " + Str(pointSize) + " Tf") endpage (beginstream) beginstream = StartPage() EndIf line = ReplaceString(ReplaceString(ReplaceString(line, "\", "\\"), "(", "\("), ")", "\)") If Len(line) > linelen ;word wrap While Len(line) > linelen tmpline = Left(line, linelen) For i = Len(tmpline) To (Len(tmpline) / 2) Step -1 If FindString("*+^%$#,. ;<=>[])}!" + Chr(34), Mid(tmpline, i, 1),1) tmpline = Left(tmpline, i) Break EndIf Next line = Mid(line, Len(tmpline) + 1) writepdf("T* (" + tmpline + Chr(13) + Chr(10) + ") Tj") lineNo = lineNo + 1 ;page Break If lineNo >= lines Or FindString(line, Chr(12),1) > 0 writepdf("1 0 0 1 " + Str(npagex) + " " + Str(npagey) + " Tm") writepdf("(" + Str(pageNo) + ") Tj") writepdf("/F1 " + Str(pointSize) + " Tf") endpage (beginstream) beginstream = StartPage() EndIf Wend lineNo + 1 writepdf("T* (" + line + Chr(13) + Chr(10) + ") Tj") Else writepdf("T* (" + line + Chr(13) + Chr(10) + ") Tj") EndIf Wend CloseFile(1) EndIf writepdf("1 0 0 1 " + Str(npagex) + " " + Str(npagey) + " Tm") writepdf("(" + Str(pageNo) + ") Tj") writepdf("/F1 " + Str(pointSize) + " Tf") endpage (beginstream) EndProcedure Procedure.l StartPage() strmpos.l obj + 1 location(obj) = Position pageNo + 1 pageObj(pageNo) = obj writepdf(Str(obj) + " 0 obj") writepdf("<<") writepdf("/Type /Page") writepdf("/Parent " + Str(Tpages) + " 0 R") writepdf("/Resources " + Str(resources) + " 0 R") obj + 1 writepdf("/Contents " + Str(obj) + " 0 R") writepdf("/Rotate " + Str(rotate)) writepdf(">>") writepdf("endobj") location(obj) = Position writepdf(Str(obj) + " 0 obj") writepdf("<<") writepdf("/Length " + Str(obj + 1) + " 0 R") writepdf(">>") writepdf("stream") strmpos = Position writepdf("BT") writepdf("/F1 " + Str(pointSize) + " Tf") writepdf("1 0 0 1 50 " + Str(pageHeight - 40) + " Tm") writepdf(ReplaceString(StrD(vertSpace), ",", ".") + " TL") ProcedureReturn strmpos EndProcedure Procedure.s endpage(streamstart.l) streamEnd.l writepdf("ET") streamEnd = Position writepdf("endstream") writepdf("endobj") obj + 1 location(obj) = Position writepdf(Str(obj) + " 0 obj") writepdf(Str(streamEnd - streamstart)) writepdf ("endobj") lineNo = 0 EndProcedure Procedure endpdf() ty.s: xreF.l location(root) = Position writepdf(Str(root) + " 0 obj") writepdf("<<") writepdf("/Type /Catalog") writepdf("/Pages " + Str(Tpages) + " 0 R") writepdf(">>") writepdf("endobj") location(Tpages) = Position writepdf(Str(Tpages) + " 0 obj") writepdf("<<") writepdf("/Type /Pages") writepdf("/Count " + Str(pageNo)) writepdf("/MediaBox [ 0 0 " + Str(pageWidth) + " " + Str(pageHeight) + " ]") ty = ("/Kids [ ") For i = 1 To pageNo ty + Str(pageObj(i)) + " 0 R " Next ty + "]" writepdf(ty) writepdf(">>") writepdf("endobj") xreF = Position writepdf("0 " + Str(obj + 1)) writepdf("0000000000 65535 f ") For i = 1 To obj writepdf(RSet(Str(location(i)), 10, "0") + " 00000 n ") Next writepdf("trailer") writepdf("<<") writepdf("/Size " + Str(obj + 1)) writepdf("/Root " + Str(root) + " 0 R") writepdf("/Info " + Str(info) + " 0 R") writepdf(">>") writepdf("startxref") writepdf(Str(xreF)) writepdf("%%EOF", 1) EndProcedure Procedure ConvertToPDF(sFileTXT.s, sFilePDF.s, sAppName.s="", sAuthor.s="", sCreator.s="", sKeywords.s="", sSubject.s="", sTitle.s="", sBaseFont.s="Courier", lpointSize.l = 12, lrotate.l=0, dpageWidth.d = 8.5, lpageHeight.l = 11) If ReadFile(0,sFileTXT) = 0 MessageRequester("Error","File " + Chr(34) + sFileTXT + Chr(34) + " not found.",#MB_ICONERROR) ProcedureReturn EndIf CloseFile(0) ;initialize FileTXT = sFileTXT FilePDF= sFilePDF AppName = sAppName Author = sAuthor Creator = sCreator Keywords = sKeywords Subject = sSubject Title = sTitle BaseFont = sBaseFont pointsize = lpointsize rotate = lrotate pageHeight = lpageHeight * 72 pageWidth = dpageWidth * 72 obj=0 Position = 0 cache = "" vertSpace = pointsize * 1.2 ; Vertical spacing lines = (pageHeight - 72) / vertSpace ; no of lines on one page If FindString(LCase(BaseFont), "courier",1) ; for Courier font linelen = 1.5 * pageWidth / pointSize ElseIf FindString(LCase(BaseFont), "arial",1) ; for Arial font linelen = 2 * pageWidth / pointSize ElseIf FindString(LCase(BaseFont), "times-roman",1) ; for Time New Roman font linelen = 2.2 * pageWidth / pointSize Else linelen = 2.2 * pageWidth / pointSize ; any other font EndIf npagex = pageWidth / 2 npagey = 25 WriteStart() WriteHead() WritePages() endpdf() EndProcedure If OpenWindow(0, 300, 300, 350, 80,"PDF Converter", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) ;If CreateGadgetList(WindowID(0)) StringGadget(0,10,10,330,20,GetPathPart(ProgramFilename()) + "testTXT.txt") StringGadget(1,10,30,330,20,GetPathPart(ProgramFilename()) + "testPDF.pdf") ButtonGadget(2,10,50,60,25,"Convert") ;EndIf Repeat EventID = WaitWindowEvent() If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button Quit = 1 ElseIf EventID = #PB_Event_Gadget If EventGadget() = 2 ConvertToPDF(GetGadgetText(0),GetGadgetText(1),"","","","","","","",8) EndIf EndIf Until Quit = 1 EndIf End ; IDE Options = PureBasic 4.30 (Windows - x64) ; CursorPosition = 283 ; FirstLine = 241 ; Folding = -- ; EnableXP ; EnableAdmin ; Executable = PDF_Converter.exe ; CurrentDirectory = F:\120GB\WInfo.exe\ ; CompileSourceDirectory