>Lparameter tcPdfFileName >lcPdf = Filetostr(tcPdfFileName) >Do Case >Case Left(lcPdf,8) = "%PDF-1.2" > lnPos = At("/Count", lcPdf) > lPageCount=Substr(lcPdf,lnPos+6,10) > lPageCount=Val(lPageCount) >Case Left(lcPdf,8) = "%PDF-1.4" Or Left(lcPdf,8) = "%PDF-1.5" > lPageCount=Occurs('/Page/',lcPdf) >Otherwise > lPageCount=0 >Endcase >Return lPageCount >>
FUNCTION PdfPageCount >>LPARAMETERS tcPdfFileName >>LOCAL lnPageCount, lcPdf, lnPos, lcStr, lnPosStart, ; >> lcLine, lcObgPages, lnPosPages, lcPageCount >>lnPageCount = Null >> >>lcPdf = FILETOSTR(tcPdfFileName) >>lnPos = AT("/Type /Catalog", lcPdf) >> >>IF LEFT(lcPdf,8) = "%PDF-1.2" >> * The previous line has Pages object ref # >> lcStr = SUBSTR(lcPdf, lnPos-128, 128) >> lnPosStart = RAT(CHR(13), lcStr, 2) >> lcLine = STREXTRACT(SUBSTR(lcStr, lnPosStart), CHR(13), CHR(13)) >>ELSE >> * The next line has Pages object ref # >> lcLine = STREXTRACT(SUBSTR(lcPdf, lnPos, 256), CHR(13), CHR(13)) >>ENDIF >> >>* The 2nd word is the pages object ref # >>lcObgPages = GETWORDNUM(lcLine,2) >>* Find Pages object and extract page count >>lnPosPages = AT(CHR(13) + lcObgPages + " 0 obj", lcPdf) >>lcStr = SUBSTR(lcPdf, lnPosPages+1, 512) >>lcPageCount = STREXTRACT(lcStr, "/Count ", " ") >>lnPageCount = INT(VAL(lcPageCount)) >> >>RETURN lnPageCount >>>>