Sfoglia il codice sorgente

161028
Modify:
PDF text support rich text label <b>
PDF text add line break mode.
Fixed:
offline pdf can not open.

Ray Zhang 9 anni fa
parent
commit
143395fc04

BIN
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/Ray.xcuserdatad/UserInterfaceState.xcuserstate


+ 517 - 21
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/Ray.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -26,11 +26,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/pdfCreator/GridDrawable.m"
-            timestampString = "499158151.013799"
+            timestampString = "499231568.043411"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "94"
-            endingLineNumber = "94"
+            startingLineNumber = "116"
+            endingLineNumber = "116"
             landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
             landmarkType = "7">
          </BreakpointContent>
@@ -42,11 +42,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/RAUtils.m"
-            timestampString = "499159094.716871"
+            timestampString = "499313996.998615"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "187"
-            endingLineNumber = "187"
+            startingLineNumber = "204"
+            endingLineNumber = "204"
             landmarkName = "+rectAlign:rect:hAlign:vAlign:"
             landmarkType = "7">
          </BreakpointContent>
@@ -90,11 +90,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/Functions/offline/OLDataProvider.m"
-            timestampString = "499165113.808898"
+            timestampString = "499250158.560089"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "194"
-            endingLineNumber = "194"
+            startingLineNumber = "327"
+            endingLineNumber = "327"
             landmarkName = "+prepare_portfolio_data:"
             landmarkType = "7">
          </BreakpointContent>
@@ -122,11 +122,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/pdfCreator/PDFPage.m"
-            timestampString = "499163047.063112"
+            timestampString = "499230437.254781"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "189"
-            endingLineNumber = "189"
+            startingLineNumber = "190"
+            endingLineNumber = "190"
             landmarkName = "-Draw:dataSource:"
             landmarkType = "7">
          </BreakpointContent>
@@ -154,11 +154,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/Functions/offline/OLDataProvider.m"
-            timestampString = "499165113.808898"
+            timestampString = "499250158.560089"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "193"
-            endingLineNumber = "193"
+            startingLineNumber = "326"
+            endingLineNumber = "326"
             landmarkName = "+prepare_portfolio_data:"
             landmarkType = "7">
          </BreakpointContent>
@@ -186,11 +186,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/Functions/offline/OLDataProvider.m"
-            timestampString = "499226074.643896"
+            timestampString = "499250158.560089"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "205"
-            endingLineNumber = "205"
+            startingLineNumber = "338"
+            endingLineNumber = "338"
             landmarkName = "+offline_request_tearsheet:"
             landmarkType = "7">
          </BreakpointContent>
@@ -202,14 +202,510 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "common/Functions/offline/OLDataProvider.m"
-            timestampString = "499226089.489254"
+            timestampString = "499250158.560089"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "210"
-            endingLineNumber = "210"
+            startingLineNumber = "343"
+            endingLineNumber = "343"
             landmarkName = "+offline_request_tearsheet:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499227321.805319"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "97"
+            endingLineNumber = "97"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  shouldBeEnabled = "No"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "+[OLDataProvider prepare_portfolio_data:]"
+                  moduleName = "NPD Mobile"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///ios_workspace/RedAnt%20ERP%20Mobile/common/Functions/offline/OLDataProvider.m"
+                  timestampString = "499250627.721992"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "97"
+                  endingLineNumber = "97"
+                  offsetFromSymbolStart = "1097">
+               </Location>
+               <Location
+                  shouldBeEnabled = "No"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__Block_byref_object_dispose_"
+                  moduleName = "NPD Mobile"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///ios_workspace/RedAnt%20ERP%20Mobile/common/Functions/offline/OLDataProvider.m"
+                  timestampString = "499250627.728236"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "97"
+                  endingLineNumber = "97"
+                  offsetFromSymbolStart = "14">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/ImageDrawable.m"
+            timestampString = "499228614.216166"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "48"
+            endingLineNumber = "48"
+            landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/GridDrawable.m"
+            timestampString = "499231568.043411"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "140"
+            endingLineNumber = "140"
+            landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/GridDrawable.m"
+            timestampString = "499231568.043411"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "162"
+            endingLineNumber = "162"
+            landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499231713.604779"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "80"
+            endingLineNumber = "80"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499250158.560089"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "138"
+            endingLineNumber = "138"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499250335.781054"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "106"
+            endingLineNumber = "106"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499250347.443399"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "119"
+            endingLineNumber = "119"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499250457.847315"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "220"
+            endingLineNumber = "220"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499250519.613782"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "223"
+            endingLineNumber = "223"
+            landmarkName = "+prepare_portfolio_data:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/data_provider/iSalesDB.m"
+            timestampString = "499250715.055049"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "373"
+            endingLineNumber = "373"
+            landmarkName = "+get_db"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "297"
+            endingLineNumber = "297"
+            landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "170"
+            endingLineNumber = "170"
+            landmarkName = "-richtext2attributedstring:font:size:bold:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "172"
+            endingLineNumber = "172"
+            landmarkName = "-richtext2attributedstring:font:size:bold:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "174"
+            endingLineNumber = "174"
+            landmarkName = "-richtext2attributedstring:font:size:bold:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/data_provider/iSalesNetwork.m"
+            timestampString = "499317675.402681"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "29"
+            endingLineNumber = "29"
+            landmarkName = "+LoadImage:into:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "279"
+            endingLineNumber = "279"
+            landmarkName = "-Draw:dataSource:ParentRect:startX:startY:flipHeight:range:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/pdfCreator/TextDrawable.m"
+            timestampString = "499318958.71537"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "140"
+            endingLineNumber = "140"
+            landmarkName = "-richtext2attributedstring:font:size:bold:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/PDF+Web/PDFViewController.m"
+            timestampString = "499319565.703958"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "135"
+            endingLineNumber = "135"
+            landmarkName = "-loadcontent"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/portfolio/PortfolioViewController.m"
+            timestampString = "499320134.831454"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "406"
+            endingLineNumber = "406"
+            landmarkName = "-onCreateTearSheet:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499325427.399024"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "10287"
+            endingLineNumber = "10287"
+            landmarkName = "+offline_pdfList:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499325427.399024"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "354"
+            endingLineNumber = "354"
+            landmarkName = "+offline_request_tearsheet:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/PDF+Web/PDFViewController.m"
+            timestampString = "499325535.15721"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "140"
+            endingLineNumber = "140"
+            landmarkName = "-loadcontent"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/PDF+Web/PDFViewController.m"
+            timestampString = "499326721.494831"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "465"
+            endingLineNumber = "465"
+            landmarkName = "-webViewDidFinishLoad:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/PDF+Web/PDFViewController.m"
+            timestampString = "499326721.494831"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "236"
+            endingLineNumber = "236"
+            landmarkName = "-loadcontent"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499326794.151895"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "10253"
+            endingLineNumber = "10253"
+            landmarkName = "+offline_pdfList:"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "+[OLDataProvider offline_pdfList:]"
+                  moduleName = "NPD Mobile"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///ios_workspace/RedAnt%20ERP%20Mobile/common/Functions/offline/OLDataProvider.m"
+                  timestampString = "499327084.361956"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "10253"
+                  endingLineNumber = "10253"
+                  offsetFromSymbolStart = "892">
+               </Location>
+               <Location
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "__34+[OLDataProvider offline_pdfList:]_block_invoke"
+                  moduleName = "NPD Mobile"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///ios_workspace/RedAnt%20ERP%20Mobile/common/Functions/offline/OLDataProvider.m"
+                  timestampString = "499327084.364893"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "10253"
+                  endingLineNumber = "10253"
+                  offsetFromSymbolStart = "50">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "common/Functions/offline/OLDataProvider.m"
+            timestampString = "499327137.823983"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "10082"
+            endingLineNumber = "10082"
+            landmarkName = "+offline_savePDF:direct:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 1 - 0
RedAnt ERP Mobile/common/Functions/PDF+Web/PDFViewController.h

@@ -14,6 +14,7 @@
 @property (strong,nonatomic) NSString* url;
 @property (strong,nonatomic) NSString* filename;
 @property (strong,nonatomic) NSData* content;
+@property bool isLocalfile;
 @property (strong, nonatomic) IBOutlet UIBarButtonItem *BB_action;
 @property (strong,nonatomic) UIDocumentInteractionController* fileInteractionController;
 @property (nonatomic , copy) void (^onLoadSuccess)(NSString* url );

+ 24 - 0
RedAnt ERP Mobile/common/Functions/PDF+Web/PDFViewController.m

@@ -134,6 +134,29 @@
     
     UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait..." title:@"Loading..."];
     self.mum.hidden=false;
+    
+    if(self.isLocalfile)
+    {
+        self.content= [NSData dataWithContentsOfFile:self.url];
+        [self.webView loadData:self.content MIMEType:@"application/pdf" textEncodingName:nil baseURL:nil];
+        [waitalert dismissWithClickedButtonIndex:0 animated:FALSE];
+        
+        self.filename=[self.url lastPathComponent];
+        
+        self.btnshare.enabled =true;
+        
+        
+        self.btnemail.enabled =true;
+        self.btnsave.enabled =true;
+        
+        if(self.onLoadSuccess)
+        self.onLoadSuccess(self.url);
+        
+        if(self.autoPrint)
+        [self startAirPrintWithData:self.content];
+        
+    }
+    else
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         
         
@@ -208,6 +231,7 @@
 //            NSLog(@"%@",[[NSString alloc] initWithData:self.content encoding:NSASCIIStringEncoding]);
             //
             
+            NSLog(urlResponse.MIMEType);
             
             [self.webView loadData:self.content MIMEType:urlResponse.MIMEType textEncodingName:nil baseURL:nil];
             

+ 161 - 27
RedAnt ERP Mobile/common/Functions/offline/OLDataProvider.m

@@ -17,7 +17,7 @@
 #import "AppDelegate.h"
 #import "pdfCreator.h"
 #import "Singleton.h"
-
+#import "QRCodeGenerator.h"
 
 @interface OLDataProvider ()
 
@@ -62,7 +62,7 @@
     }
     else
     {
-        [ret setValue:@"8" forKey:@"result"];
+       ret=@"";
     }
     
     
@@ -91,34 +91,167 @@
     NSMutableDictionary* grid = [[NSMutableDictionary alloc]init];
     
     
-    
-    NSString *sql = [NSString stringWithFormat:@"select a.product_id,a.name,a.description,a.price,a.sheet_discount,a.qty,a.percentage,a.item_id,a.fashion_id,a.line_note,a.percent,a._id from (select _id, product_id,name,description,ifnull(sheet_price,'null') as price,sheet_discount,ifnull(available_qty,'null') as qty,percentage,item_id,fashion_id,line_note,percent from offline_portfolio where product_id in(%@)) a left join (select * from product where product_id in(%@)) b on a.product_id=b.product_id",params[@"product_ids"],params[@"product_ids"]];
+    bool show_stockout=[params[@"show_stockout"] boolValue];
+    NSString *sql = [NSString stringWithFormat:@"select a.product_id,a.name,a.description,a.price,a.sheet_discount,a.qty,a.is_percentage,a.item_id,a.fashion_id,a.line_note,a.percent,a._id,b.availability,b.color,b.legcolor,b.demension,b.seat_height,b.material,b.box_dim,b.volume,b.weight,stockuom,b.load_ability,b.fabric_content,b.assembling,b.made_in from (select _id, product_id,name,description,ifnull(sheet_price,'null') as price,sheet_discount,ifnull(available_qty,'null') as qty,percentage as is_percentage,item_id,fashion_id,line_note,percent from offline_portfolio where product_id in(%@)) a left join (select * from product where product_id in(%@)) b on a.product_id=b.product_id",params[@"product_ids"],params[@"product_ids"]];
     
     __block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
     
     AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
     
     sqlite3 *db = [iSalesDB get_db];
-    NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
+     NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
         
      //   [dic setValue:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
         
         int product_id = sqlite3_column_int(stmt, 0);
-        NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id];
+ //       NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id];
         NSString *name = [self textAtColumn:1 statement:stmt];
         NSString *description = [self textAtColumn:2 statement:stmt];
         double price = sqlite3_column_double(stmt, 3);
         double discount = sqlite3_column_double(stmt,4);
         int qty = sqlite3_column_int(stmt, 5);
-        int percentage = sqlite3_column_int(stmt, 6);
+        NSString *s_qty = [self textAtColumn:5 statement:stmt];
+        int is_percentage = sqlite3_column_int(stmt, 6);
+        NSString *s_is_percentage = [self textAtColumn:6 statement:stmt];
         int item_id = sqlite3_column_int(stmt, 7);
         //        int fashion_id = sqlite3_column_int(stmt, 8);
         NSString *line_note = [self textAtColumn:9 statement:stmt];
+        NSString *s_percent = [self textAtColumn:10 statement:stmt];
         double percent = sqlite3_column_double(stmt, 10);
-        int portfolio_id = sqlite3_column_int(stmt, 11);
+ //       int portfolio_id = sqlite3_column_int(stmt, 11);
+        NSString *s_availability = [self textAtColumn:12 statement:stmt];
+        int availability = sqlite3_column_int(stmt, 12);
+        NSString *color = [self textAtColumn:13 statement:stmt];
+        
+        NSString *legcolor = [self textAtColumn:14 statement:stmt];
+        NSString *demension = [self textAtColumn:15 statement:stmt];
+        NSString *seat_height = [self textAtColumn:16 statement:stmt];
+        NSString *material = [self textAtColumn:17 statement:stmt];
+        NSString *box_dim = [self textAtColumn:18 statement:stmt];
+        NSString *s_volume = [self textAtColumn:19 statement:stmt];
+        double   volume = sqlite3_column_double(stmt, 19);
+        NSString *s_weight = [self textAtColumn:20 statement:stmt];
+        double   weight = sqlite3_column_double(stmt, 20);
+        NSString *s_model_set = [self textAtColumn:21 statement:stmt];
+        int   model_set = sqlite3_column_int(stmt, 21);
+        
+        NSString *s_load_ability = [self textAtColumn:22 statement:stmt];
+        double   load_ability = sqlite3_column_double(stmt, 22);
+        NSString *fabric_content = [self textAtColumn:23 statement:stmt];
+        NSString *assembling = [self textAtColumn:24 statement:stmt];
+        NSString *made_in = [self textAtColumn:25 statement:stmt];
+
+        if(is_percentage==0&&qty==0&&!show_stockout)
+        {
+            return;
+        }
+        
+        if((is_percentage!=0||s_is_percentage.length==0)&&availability==0&&!show_stockout)
+        {
+            return;
+        }
+        if(is_percentage)
+        {
+            qty=availability;
+            
+        }
+        else
+        {
+            percent=1;
+        }
+//        NSString *qty_null = [self textAtColumn:5 statement:stmt];
+//        if ([qty_null isEqualToString:@"null"]) {
+//            qty=availability;
+//        }
+//        
+//        NSString *qty_percent_null = [self textAtColumn:6 statement:stmt];
+//        if ([qty_percent_null isEqualToString:@"null"]) {
+//            percentage=1;
+//        }
+        
+        NSString * str_availability=[NSString stringWithFormat:@"<b>Availability:</b> %d",(int)(qty*percent+0.5)];
+        NSString * str_color=[NSString stringWithFormat:@"<b>Color:</b> %@",color];
+        NSString * str_model_set=[NSString stringWithFormat:@"<b>Set:</b> Sold in QTY of %d",model_set];
+        NSString * str_legcolor=[NSString stringWithFormat:@"<b>Leg Color:</b> %@",legcolor];
+        NSString * str_demension=[NSString stringWithFormat:@"<b>Dimension:</b> %@",demension];
+        NSString * str_seat_height=[NSString stringWithFormat:@"<b>Seat Height:</b> %@",seat_height];
+        NSString * str_meterial=[NSString stringWithFormat:@"<b>Meterial:</b> %@",material];
+        NSString * str_box_dim=[NSString stringWithFormat:@"<b>Box Dimension:</b> %@",box_dim];
+        NSString * str_volume=[NSString stringWithFormat:@"<b>Volume:</b> %.2f",volume];
+        NSString * str_weight=[NSString stringWithFormat:@"<b>Weight:</b> %.2f",weight];
+        NSString * str_load_ability=[NSString stringWithFormat:@"<b>Load Ability:</b> %.2f",load_ability];
+        NSString * str_fabric_content=[NSString stringWithFormat:@"<b>Fabric Content:</b> %@",fabric_content];
+        NSString * str_assembling=[NSString stringWithFormat:@"<b>Assembling:</b> %@",assembling];
+        NSString * str_made_in=[NSString stringWithFormat:@"<b>Made In:</b> %@",made_in];
+        NSString * str_line_note=[NSString stringWithFormat:@"<b>Line Note:</b> %@",line_note];
+
+        if([params[@"availability"] boolValue]==false || (s_qty.length==0 && s_availability.length==0))
+            str_availability=@"";
+        
+        if([params[@"color"] boolValue]==false || color.length==0 )
+            str_color=@"";
+        if([params[@"set"] boolValue]==false || s_model_set.length==0 )
+        str_model_set=@"";
+        if([params[@"leg_color"] boolValue]==false || legcolor.length==0 )
+        str_legcolor=@"";
+        if([params[@"dimension"] boolValue]==false || demension.length==0 )
+        str_demension=@"";
+        if([params[@"seat_height"] boolValue]==false && seat_height.length==0 )
+        str_seat_height=@"";
+        if([params[@"material"] boolValue]==false && material.length==0 )
+        str_meterial=@"";
+        if([params[@"box_dimension"] boolValue]==false && box_dim.length==0 )
+        str_box_dim=@"";
+        if([params[@"volume"] boolValue]==false && s_volume.length==0 )
+        str_volume=@"";
+        if([params[@"weight"] boolValue]==false && s_weight.length==0 )
+        str_weight=@"";
+        if([params[@"load_ability"] boolValue]==false && s_load_ability.length==0 )
+        str_load_ability=@"";
+        if([params[@"fabric_content"] boolValue]==false && fabric_content.length==0 )
+        str_fabric_content=@"";
+        if([params[@"assembling"] boolValue]==false && assembling.length==0 )
+        str_assembling=@"";
+        if([params[@"made"] boolValue]==false && made_in.length==0 )
+        str_made_in=@"";
+        if([params[@"show_line_note"] boolValue]==false && line_note.length==0 )
+        str_line_note=@"";
+        
+        NSMutableArray* arr_detail=[[NSMutableArray alloc]init];
+        
+        
+        [arr_detail addObject:str_color];
+        [arr_detail addObject:str_model_set];
+        [arr_detail addObject:str_legcolor];
+        [arr_detail addObject:str_demension];
+        [arr_detail addObject:str_seat_height];
+        [arr_detail addObject:str_meterial];
+        [arr_detail addObject:str_box_dim];
+        [arr_detail addObject:str_volume];
+        [arr_detail addObject:str_weight];
+        [arr_detail addObject:str_load_ability];
+        [arr_detail addObject:str_fabric_content];
+        [arr_detail addObject:str_assembling];
+        [arr_detail addObject:str_made_in];
+        [arr_detail addObject:str_line_note];
+
+        
+      //   NSString* detail =[NSString stringWithFormat:@"<font size=0.2>%@</font>",[RAUtils arr2string:arr_detail separator:@" " trim:true]];
+        NSString* detail =[RAUtils arr2string:arr_detail separator:@" " trim:true];
+
+        
+        //model image;
         NSString* img_path = [self portfolio_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db];
         
         
+        // qr image
+        NSString* temp = NSTemporaryDirectory();
+        NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]];
+        NSString* qrpath=[temp stringByAppendingPathComponent:filename];
+        UIImage* qrimg=[QRCodeGenerator qrImageForString:name imageSize:240];
+        [UIImagePNGRepresentation(qrimg)writeToFile: qrpath    atomically:YES];
+        
+        
         NSString* set_price=@"";
         NSString *price_null = [self textAtColumn:3 statement:stmt];
         if ([price_null isEqualToString:@"null"]) {
@@ -126,7 +259,7 @@
         }
         else
         {
-            set_price=[NSString stringWithFormat:@"%.2f",price*(1-discount)];
+            set_price=[NSString stringWithFormat:@"Special: $ %.2f",price*(1-discount)];
         }
         NSString* get_price=@"";
         {
@@ -135,7 +268,7 @@
             //                [self printTimeIntervalBetween:price_date and:[NSDate date]];
             
             if(price!=nil)
-                get_price=[NSString stringWithFormat:@"%.2f",price.floatValue];
+                get_price=[NSString stringWithFormat:@"Price: $ %.2f",price.floatValue];
         }
         
         
@@ -143,7 +276,7 @@
         
         
         NSMutableDictionary *item = @{
-                                      @"linenotes": line_note,
+                                      //@"linenotes": line_note,
 //                                      @"product_id": product_id_string,
 //                                      @"available_qty": @(qty),
 //                                      @"available_percent" : @(percent),
@@ -151,23 +284,23 @@
 //                                      @"item_id": [NSString stringWithFormat:@"%d",item_id],
 //                                      @"fashion_id": [NSString stringWithFormat:@"%d",product_id],
                                       @"img": img_path,
-                                      @"img_qr": img_path,
+                                      @"img_qr": qrpath,
                                       @"special_price": set_price,
                                       @"price": get_price,
-                                      @"name": get_price,
-                                      @"description": get_price,
-                                      @"detail": get_price
+                                      @"name": name,
+                                      @"description": description,
+                                      @"detail": detail
                                       }.mutableCopy;
-        if (percentage) {
-            [item removeObjectForKey:@"available_qty"];
-        } else {
-            [item removeObjectForKey:@"available_percent"];
-        }
-        
-        NSString *qty_null = [self textAtColumn:5 statement:stmt];
-        if ([qty_null isEqualToString:@"null"]) {
-            [item removeObjectForKey:@"available_qty"];
-        }
+//        if (percentage) {
+//            [item removeObjectForKey:@"available_qty"];
+//        } else {
+//            [item removeObjectForKey:@"available_percent"];
+//        }
+//        
+//        NSString *qty_null = [self textAtColumn:5 statement:stmt];
+//        if ([qty_null isEqualToString:@"null"]) {
+//            [item removeObjectForKey:@"available_qty"];
+//        }
         
         
         [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]];
@@ -214,10 +347,11 @@
     if (file) {
         [dic setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
         [dic setObject:file forKey:@"pdf_path"];
+            dic[@"isLocalFile"]=@"true";
         return [RAUtils dict2data:dic];
     }
     [dic setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
-    
+    dic[@"isLocalFile"]=@"true";
     return [RAUtils dict2data:dic];
 }
 +(NSString*) get_offline_soid:(sqlite3*)db
@@ -10150,7 +10284,7 @@
     }];
     
     [dic setValue:@"Regular Mode" forKey:@"mode"];
-    
+    dic[@"isLocalFile"]=@"true";
     return [RAUtils dict2data:dic];
 }
 

+ 2 - 0
RedAnt ERP Mobile/common/Functions/portfolio/PDFListViewController.m

@@ -499,10 +499,12 @@
         return;
     NSString* name=[self.content_data[indexPath.row] valueForKey:@"tear_name"];
     NSString* url= [self.content_data[indexPath.row] valueForKey:@"pdf_path"];
+    NSString* isLocalFile= [self.content_data[indexPath.row] valueForKey:@"isLocalFile"];
     
     PDFViewController *ViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PDFViewController"];
     ViewController.url = url;
     ViewController.canSave = false;
+    ViewController.isLocalfile=isLocalFile;
     NSString* subject;
     //                    if (company.length==0) {
     

+ 2 - 2
RedAnt ERP Mobile/common/Functions/portfolio/TearSheetParamViewController.m

@@ -293,11 +293,11 @@
                 
                 NSString* url = [editor_json valueForKey:@"pdf_path"];
                 NSString* path = [editor_json valueForKey:@"pdf_real_path"];
-                
+                bool isLocalFile = [[editor_json valueForKey:@"isLocalFile"] boolValue];
                 PDFViewController *ViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PDFViewController"];
                 ViewController.url = url;
                 ViewController.canSave = true;
-                
+                ViewController.isLocalfile=isLocalFile;
                 //                    ViewController.mail_content = [self.content_data valueForKey:@"email_content"];
                 
                 ViewController.save_name =catelog_name;

+ 1 - 0
RedAnt ERP Mobile/common/RAUtils.h

@@ -41,6 +41,7 @@ typedef void (^add_to_cart_Handler)(void);
 +(void) enum_font;
 +(NSDictionary*) dictfromfile:(NSString*) path;
 +(NSArray*) expression_varable:(NSString*)content regex:(NSString*) pattern;
++(NSTextCheckingResult*) expression_findfistMatch:(NSString*)content regex:(NSString*) pattern;
 +(NSData*) getdbfile;
 +(NSString*) getdbzip;
 + (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;

+ 17 - 0
RedAnt ERP Mobile/common/RAUtils.m

@@ -160,6 +160,23 @@
         }
     }
 }
+
+
++(NSTextCheckingResult*) expression_findfistMatch:(NSString*)content regex:(NSString*) pattern
+{
+    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:nil error:nil];
+    
+    NSTextCheckingResult *match = [regex firstMatchInString:content options:nil range:NSMakeRange(0, content.length)];
+    return match;
+//    if (matches) {
+//        for (NSTextCheckingResult *match in matches) {
+//            for (int i = 0; i < match.numberOfRanges; ++i) {
+//                NSLog(@"-> %@", [content substringWithRange:[match rangeAtIndex:i]]);
+//            }
+//        }
+//    }
+//    return matches;
+}
 +(NSArray*) expression_varable:(NSString*)content regex:(NSString*) pattern
 {
     

+ 58 - 20
RedAnt ERP Mobile/common/pdfCreator/GridDrawable.m

@@ -11,12 +11,14 @@
 @implementation GridDrawable
 -(CGRect) Query_Rect:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
 {
+    
+    
     NSMutableDictionary* table_data = data[self.drawableTemplate[@"data_source"]];
     
     NSMutableDictionary* celljson = self.drawableTemplate[@"cell"];
     NSString* direction = celljson[@"direction"];
     if(direction==nil)
-        direction=@"H";
+    direction=@"H";
     
     //    CGRect pdfrect = /*CGRectMake(self.rect.origin.x+self.margin_left+p_rect.origin.x, self.rect.origin.y+self.margin_top+p_rect.origin.y, self.rect.size.width-self.margin_right, self.rect.size.height-self.margin_bottom);//*/[self to_pdf_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
     
@@ -28,7 +30,7 @@
     drawable_obj.delegate = self.delegate;
     NSMutableDictionary* rows_data = table_data[celljson[@"data_source"]];
     int row_data_count=[rows_data[@"count"] intValue];
-    float dy=0;
+    float dy=y;
     float dx=0;
     for(int j=0;j<row_data_count;j++)
     {
@@ -43,20 +45,36 @@
             // cell 比 grid 还要大,模板有错,直接返回。
             return parentrect;
         }
-        
-        if(dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length && dx+row_rect.size.width>parentrect.size.width)
+        if([direction isEqualToString:@"H"])
         {
-            //越界,新起一页
-            if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
-                [self.delegate addPageCount:context];
-                dy=0;
-                dx=0;
+            if(dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length )
+            {
+                //越界,新起一页
+                if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
+                    [self.delegate addPageCount:context];
+                    dy=y;
+                    dx=0;
+                }
             }
         }
+        else
+        {
+            if(/*dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length && */dx+row_rect.size.width>parentrect.size.width )
+            {
+                //越界,新起一页
+                if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
+                    [self.delegate addPageCount:context];
+                    dy=y;
+                    dx=0;
+                }
+            }
+            
+        }
         
         
         
-     //   [drawable_obj Draw:context dataSource:row_data ParentRect:(CGRect)pdfrect startX:dx startY:dy flipHeight:flip_height range:between_header_and_footer];
+        
+    //    [drawable_obj Draw:context dataSource:row_data ParentRect:(CGRect)pdfrect startX:dx startY:dy flipHeight:flip_height range:between_header_and_footer];
         if([direction isEqualToString:@"H"])
         {
             dx+=row_rect.size.width;
@@ -70,9 +88,9 @@
         else
         {
             dy+=row_rect.size.height;
-            if(dy+row_rect.size.height>parentrect.size.height)
+            if(dy-y+row_rect.size.height>parentrect.size.height)
             {
-                dy=0;
+                dy=y;
                 dx+=row_rect.size.width;
             }
             
@@ -86,6 +104,10 @@
     
     
     return parentrect;
+    //return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
+    //    if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
+    //        [self.delegate outofPage:context];
+    //    }
 }
 -(CGRect) Draw:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
 {
@@ -123,16 +145,32 @@
             // cell 比 grid 还要大,模板有错,直接返回。
             return parentrect;
         }
-        
-        if(dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length && dx+row_rect.size.width>parentrect.size.width)
+        if([direction isEqualToString:@"H"])
         {
-            //越界,新起一页
-            if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
-                [self.delegate outofPage:context];
-                dy=y;
-                dx=0;
+            if(dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length )
+            {
+                //越界,新起一页
+                if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
+                    [self.delegate outofPage:context];
+                    dy=y;
+                    dx=0;
+                }
+            }
+        }
+        else
+        {
+            if(/*dy+row_rect.size.height> between_header_and_footer.location+between_header_and_footer.length && */dx+row_rect.size.width>parentrect.size.width )
+            {
+                //越界,新起一页
+                if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
+                    [self.delegate outofPage:context];
+                    dy=y;
+                    dx=0;
+                }
             }
+            
         }
+
         
         
         
@@ -150,7 +188,7 @@
         else
         {
             dy+=row_rect.size.height;
-            if(dy+row_rect.size.height>parentrect.size.height)
+            if(dy-y+row_rect.size.height>parentrect.size.height)
             {
                 dy=y;
                 dx+=row_rect.size.width;

+ 6 - 1
RedAnt ERP Mobile/common/pdfCreator/ImageDrawable.m

@@ -47,9 +47,14 @@
         
         NSString* url=data[self.drawableTemplate[@"source"]];
         
-        
         NSString* file_name=[url lastPathComponent];
+        file_name=url;
+        
         NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:url];
+        if([self.drawableTemplate[@"source_path_type"] isEqualToString:@"local"])
+        {
+           img_data= [NSData dataWithContentsOfFile: file_name];
+        }
         if(img_data!=nil)
         {
             

+ 6 - 0
RedAnt ERP Mobile/common/pdfCreator/PDFDrawable.m

@@ -8,6 +8,8 @@
 
 #import "PDFDrawable.h"
 #import "LineDrawable.h"
+#import "config.h"
+
 
 @implementation PDFDrawable
 -(instancetype) init:(NSMutableDictionary *)drawableTemplate
@@ -34,6 +36,10 @@
 }
 -(void) DrawBound:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
 {
+    
+    if(!PDF_DEBUG&&![self.drawableTemplate[@"draw_bound"] boolValue] )
+    return;
+    
     CGRect rect = [self rect];//[self to_pdf_rect:p_rect pos:self.rect contextHeight:flip_height];
 
     NSMutableDictionary* tline4= [LineDrawable createlineTemplate:0.05 from:CGPointMake(rect.origin.x, rect.origin.y+rect.size.height) to:CGPointMake(rect.origin.x, rect.origin.y)];

+ 1 - 1
RedAnt ERP Mobile/common/pdfCreator/PDFPage.m

@@ -150,6 +150,7 @@
         CGContextBeginPage(context, &rect);
         [pageHeader Draw:context dataSource:data ParentRect:(CGRect)self.drawable_rect startX:0 startY:0 flipHeight:self.rect.size.height range:range];
         
+        [pageFooter Draw:context dataSource:data ParentRect:(CGRect)self.drawable_rect startX:0 startY:0 flipHeight:self.rect.size.height range:range];
         
         for (int i=0;i<[self.pageTemplate[@"contents"][@"count"] intValue];i++)
         {
@@ -189,7 +190,6 @@
             [drawable_obj Draw:context dataSource:data ParentRect:(CGRect)self.drawable_rect startX:0 startY:self.header_height flipHeight:self.rect.size.height range:range];
         }
         
-        [pageFooter Draw:context dataSource:data ParentRect:(CGRect)self.drawable_rect startX:0 startY:0 flipHeight:self.rect.size.height range:range];
         CGContextEndPage(context);
         
     }

+ 197 - 75
RedAnt ERP Mobile/common/pdfCreator/TextDrawable.m

@@ -75,6 +75,15 @@
 -(CTFontRef)CreateFont:(NSString*)name  size:(double)size bold:(bool)bold
 {
     
+    if(name==nil)
+    {
+        name=@"Helvetica";
+//        name=@"DejaVu Sans";
+    }
+    if(size==0)
+    {
+        size=10;
+    }
     NSString* style = @"Regular";
     if(bold)
         style=@"Bold";
@@ -107,19 +116,108 @@
 //    }
 //    return CTFontCreateWithName((__bridge CFStringRef)name, size, NULL);
 }
--(NSString*) QueryFontName:(NSString*)font
+//-(NSString*) QueryFontName:(NSString*)font
+//{
+//    if(font==nil)
+//    {
+//        return @"Helvetica";
+//    }
+//    else if([font.lowercaseString isEqualToString:@"kalinga"])
+//    {
+//        return @"kalinga";
+//    }
+//    return @"Helvetica";
+//}
+-(NSMutableAttributedString*) richtext2attributedstring:(NSMutableAttributedString*)string font:(NSString*)font  size:(double)size bold:(bool)bold
 {
-    if(font==nil)
-    {
-        return @"Helvetica";
-    }
-    else if([font.lowercaseString isEqualToString:@"kalinga"])
+//    UILabel* uilabel=[[UILabel alloc]init];
+//    uilabel.font=[UIFont fontWithName:font size:size];
+//    NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[self.text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
+//    uilabel.attributedText = attrStr;
+//    NSLog(@"%@", attrStr);
+//    NSLog(@"%@", uilabel.attributedText);
+    
+    CTFontRef ctfont = [self CreateFont:font size:size bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);b
+    
+    CTFontRef ctfont_bold = [self CreateFont:font size:size bold:true];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+    //    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+    //字体,把helvetica 样式加到整个,string上
+        [string addAttribute:(id)kCTFontAttributeName
+                       value:CFBridgingRelease(ctfont)
+                       range:NSMakeRange(0, [string length])];
+    
+    //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
+    [string addAttribute:(id)kCTForegroundColorAttributeName
+                   value:(id)self.textColor.CGColor
+                   range:NSMakeRange(0, [string length])];
+    
+    
+    if(!bold)
     {
-        return @"kalinga";
+        NSString* newstring= nil;
+     //   NSString *content =  string.string ;
+        NSString *pattern = @"\\<b\\>([\\s\\S]*?)\\<\\/b\\>";
+//        NSArray* matches=[RAUtils expression_varable:content regex:pattern];
+//        if (matches) {
+//            for (NSTextCheckingResult *match in matches) {
+//                for (int i = 0; i < match.numberOfRanges; ++i) {
+//                    NSLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//                }
+//            }
+//        }
+        NSTextCheckingResult * match=[RAUtils expression_findfistMatch:string.string regex:pattern];
+        
+        while(match)
+        {
+            //for (int i = 0; i < match.numberOfRanges/2; ++i)
+            {
+                int i=0;
+                NSLog(@"%d->range with richtext label: %d,%d",i, [match rangeAtIndex:i].location,[match rangeAtIndex:i].length);
+                NSLog(@"%d-> range of text: %d,%d ",i+1, [match rangeAtIndex:i+1].location,[match rangeAtIndex:i+1].length);
+                
+                
+                NSLog(@"string length: %d",string.string.length);
+                [string addAttribute:(id)kCTFontAttributeName
+                               value:(__bridge id _Nonnull)(ctfont_bold)
+                               range:[match rangeAtIndex:i+1]];
+
+                [string replaceCharactersInRange:NSMakeRange([match rangeAtIndex:i+1].location+[match rangeAtIndex:i+1].length, [match rangeAtIndex:i].location+[match rangeAtIndex:i].length-([match rangeAtIndex:i+1].location+[match rangeAtIndex:i+1].length)) withString:@""];
+                [string replaceCharactersInRange:NSMakeRange([match rangeAtIndex:i].location, [match rangeAtIndex:i+1].location-[match rangeAtIndex:i].location) withString:@""];
+
+                NSLog(@"string after replace: %@",string.string);
+                //newstring=[newstring stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[content substringWithRange:[match rangeAtIndex:i+1]]];
+                match=[RAUtils expression_findfistMatch:string.string regex:pattern];
+            }
+        }
+        //        if (matches)
+        //        {
+        //            newstring=content;
+        //            for (NSTextCheckingResult *match in matches)
+        //            {
+        //
+        //                for (int i = 0; i < match.numberOfRanges/2; ++i)
+        //                {
+        //                    NSLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+        //                    NSLog(@"%d-> %@",i+1, [content substringWithRange:[match rangeAtIndex:i+1]]);
+        //
+        //                    [string addAttribute:(id)kCTFontAttributeName
+        //                                   value:CFBridgingRelease(ctfont_bold)
+        //                                   range:[match rangeAtIndex:i+1]];
+        //
+        //                    newstring=[newstring stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[content substringWithRange:[match rangeAtIndex:i+1]]];
+        //
+        //                }
+        //            }
+        //        }
+        
+        
+        
+        CFBridgingRelease(ctfont_bold);
     }
-    return @"Helvetica";
+    
+    
+    return string;
 }
-
 -(CGRect) Draw:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
 {
     
@@ -176,6 +274,12 @@
         self.text=@"";
     
     
+//    if([self.text isEqualToString:@"Special: $ 185.00"])
+//    {
+//        int debug=0;
+//    }
+    
+    
     bool bold = [self.drawableTemplate[@"bold"] boolValue];
     bool italic = [self.drawableTemplate[@"italic"] boolValue];
     NSString* font=self.drawableTemplate[@"font"];
@@ -184,75 +288,93 @@
    // super flipContext:context ContextHeight:<#(double)#>
             CGFloat fontsize = [self.drawableTemplate[@"size"] doubleValue];
     
-    
+    //NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
     //创建AttributeStringfdsa
-    NSMutableAttributedString *string = [[NSMutableAttributedString alloc]
-                                         initWithString:self.text];
-    //创建字体以及字体大小
-    CTFontRef ctfont = [self CreateFont:font size:fontsize bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
-//    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
-    //字体,把helvetica 样式加到整个,string上
-    [string addAttribute:(id)kCTFontAttributeName
-                   value:CFBridgingRelease(ctfont)
-                   range:NSMakeRange(0, [string length])];
-    
-    //字体样式 ,把helveticaBold 样式加到整个,string上
-//    [string addAttribute:(id)kCTFontAttributeName
-//                   value:CFBridgingRelease(helveticaBold)
-//                   range:NSMakeRange(0, [string length])];
-    
-    //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
-    [string addAttribute:(id)kCTForegroundColorAttributeName
-                   value:(id)self.textColor.CGColor
-                   range:NSMakeRange(0, [string length])];
     
+    NSMutableAttributedString *string = nil;
+//    if([self.drawableTemplate[@"ishtml"] boolValue])
+//    {
+//        string=[[[NSAttributedString alloc] initWithData:[self.text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil] mutableCopy];
+//        
+//    }
+//    else
+    {
+        string=[[NSMutableAttributedString alloc] initWithString:self.text];
+        //创建字体以及字体大小
+//        CTFontRef ctfont = [self CreateFont:font size:fontsize bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//        //    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//        //字体,把helvetica 样式加到整个,string上
+//        [string addAttribute:(id)kCTFontAttributeName
+//                       value:CFBridgingRelease(ctfont)
+//                       range:NSMakeRange(0, [string length])];
+//        
+//        //字体样式 ,把helveticaBold 样式加到整个,string上
+//        //    [string addAttribute:(id)kCTFontAttributeName
+//        //                   value:CFBridgingRelease(helveticaBold)
+//        //                   range:NSMakeRange(0, [string length])];
+//        
+//        //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
+//        [string addAttribute:(id)kCTForegroundColorAttributeName
+//                       value:(id)self.textColor.CGColor
+//                       range:NSMakeRange(0, [string length])];
+        
+        string = [self richtext2attributedstring:string font:font size:fontsize bold:bold];
+        
+        
+        //设置字体间距
+        long number = self.characterSpace;
+        CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
+        [string addAttribute:(id)kCTKernAttributeName value:CFBridgingRelease(num) range:NSMakeRange(0, [string length])];
+        CFRelease(num);
+        
+        
+        //创建文本对齐方式
+        CTTextAlignment alignment = self.textalignment;//对齐方
+        CTParagraphStyleSetting alignmentStyle;
+        alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;
+        alignmentStyle.valueSize=sizeof(alignment);
+        alignmentStyle.value=&alignment;
+        
+        //创建文本,    行间距
+        CGFloat lineSpace=self.lineSpace;//间距数据
+        CTParagraphStyleSetting lineSpaceStyle;
+        lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;
+        lineSpaceStyle.valueSize=sizeof(lineSpace);
+        lineSpaceStyle.value=&lineSpace;
+        
+        //设置  line break;
+        CTLineBreakMode linebreakmode = kCTLineBreakByTruncatingTail;
+        CTParagraphStyleSetting linebreakStyle;
+        linebreakStyle.spec = kCTParagraphStyleSpecifierLineBreakMode;
+        linebreakStyle.valueSize = sizeof(CGFloat);
+        linebreakStyle.value = &linebreakmode;
+        
+        
+        //设置  段落间距
+        CGFloat paragraph = self.paragraphSpace;
+        CTParagraphStyleSetting paragraphStyle;
+        paragraphStyle.spec = kCTParagraphStyleSpecifierParagraphSpacing;
+        paragraphStyle.valueSize = sizeof(CGFloat);
+        paragraphStyle.value = &paragraph;
+        
+        
+        
+        
+        //创建样式数组
+        CTParagraphStyleSetting settings[]={
+            alignmentStyle,lineSpaceStyle,paragraphStyle,linebreakStyle
+        };
+        
+        //设置样式
+        CTParagraphStyleRef paragraphStyle1 = CTParagraphStyleCreate(settings, sizeof(settings));
+        
+        //给字符串添加样式attribute
+        [string addAttribute:(id)kCTParagraphStyleAttributeName
+                       value:(id)paragraphStyle1
+                       range:NSMakeRange(0, [string length])];
 
+    }
     
-    
-    //设置字体间距
-    long number = self.characterSpace;
-    CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
-    [string addAttribute:(id)kCTKernAttributeName value:CFBridgingRelease(num) range:NSMakeRange(0, [string length])];
-    CFRelease(num);
-    
-    
-    //创建文本对齐方式
-    CTTextAlignment alignment = self.textalignment;//对齐方
-    CTParagraphStyleSetting alignmentStyle;
-    alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;
-    alignmentStyle.valueSize=sizeof(alignment);
-    alignmentStyle.value=&alignment;
-    
-    //创建文本,    行间距
-    CGFloat lineSpace=self.lineSpace;//间距数据
-    CTParagraphStyleSetting lineSpaceStyle;
-    lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;
-    lineSpaceStyle.valueSize=sizeof(lineSpace);
-    lineSpaceStyle.value=&lineSpace;
-    
-    
-    //设置  段落间距
-    CGFloat paragraph = self.paragraphSpace;
-    CTParagraphStyleSetting paragraphStyle;
-    paragraphStyle.spec = kCTParagraphStyleSpecifierParagraphSpacing;
-    paragraphStyle.valueSize = sizeof(CGFloat);
-    paragraphStyle.value = &paragraph;
-    
-    
-    
-    
-    //创建样式数组
-    CTParagraphStyleSetting settings[]={
-        alignmentStyle,lineSpaceStyle,paragraphStyle
-    };
-    
-    //设置样式
-    CTParagraphStyleRef paragraphStyle1 = CTParagraphStyleCreate(settings, sizeof(settings));
-    
-    //给字符串添加样式attribute
-    [string addAttribute:(id)kCTParagraphStyleAttributeName
-                   value:(id)paragraphStyle1
-                   range:NSMakeRange(0, [string length])];
    //     CGRect pdfrect=[self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
    // [string drawInRect:pdfrect];
     
@@ -279,7 +401,7 @@
     CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
     
     
-    CGRect rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, tmpSize.height);
+    CGRect rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, /*tmpSize.height*/parentrect.size.height);
     
     //    CGRect rect=[RAUtils rectAlign:parentrect rect:scalerect hAlign:self.hAlign vAlign:self.vAlign];
     rect=[RAUtils rectVAlign:parentrect rect:rect vAlign:self.vAlign];

+ 2 - 4
RedAnt ERP Mobile/common/pdfCreator/pdfCreator.m

@@ -108,13 +108,11 @@
 
     //获取路径
     
-    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//坐标
-    
-    NSString *saveDirectory=[paths objectAtIndex:0];
+    NSString* tempDir = NSTemporaryDirectory();
     
     NSString *saveFileName=[NSString stringWithFormat:@"%@.pdf",[[NSUUID UUID ] UUIDString] ] ;
     
-    NSString *newFilePath=[saveDirectory stringByAppendingPathComponent:saveFileName];
+    NSString *newFilePath=[tempDir stringByAppendingPathComponent:saveFileName];
     
     const char *filename=[newFilePath UTF8String];
     

+ 8 - 0
RedAnt ERP Mobile/iSales-NPD.xcodeproj/project.pbxproj

@@ -77,6 +77,8 @@
 		7141DD631C5747CE00F7DF59 /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 7141DD5E1C5747CE00F7DF59 /* NSString+Base64.m */; };
 		7142E87A1DBF577A0077EFA2 /* KALINGA.TTF in Resources */ = {isa = PBXBuildFile; fileRef = 7142E8781DBF57510077EFA2 /* KALINGA.TTF */; };
 		7142E87B1DBF577A0077EFA2 /* KALINGAB.TTF in Resources */ = {isa = PBXBuildFile; fileRef = 7142E8791DBF57510077EFA2 /* KALINGAB.TTF */; };
+		7142E87E1DC300690077EFA2 /* DejaVuSans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7142E87C1DC300010077EFA2 /* DejaVuSans-Bold.ttf */; };
+		7142E87F1DC300690077EFA2 /* DejaVuSans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7142E87D1DC300010077EFA2 /* DejaVuSans.ttf */; };
 		714B1F401C7BF74100539193 /* OrderDetailSignatureCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 714B1F3F1C7BF74100539193 /* OrderDetailSignatureCell.m */; };
 		715001FF1D114D9100F5927F /* BundleDetailButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 715001FE1D114D9100F5927F /* BundleDetailButton.m */; };
 		715850461CF6F0E500856B20 /* DefaultAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 715850451CF6F0E500856B20 /* DefaultAppearance.m */; };
@@ -354,6 +356,8 @@
 		7141DD5E1C5747CE00F7DF59 /* NSString+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+Base64.m"; path = "common/AES/NSString+Base64.m"; sourceTree = SOURCE_ROOT; };
 		7142E8781DBF57510077EFA2 /* KALINGA.TTF */ = {isa = PBXFileReference; lastKnownFileType = file; path = KALINGA.TTF; sourceTree = "<group>"; };
 		7142E8791DBF57510077EFA2 /* KALINGAB.TTF */ = {isa = PBXFileReference; lastKnownFileType = file; path = KALINGAB.TTF; sourceTree = "<group>"; };
+		7142E87C1DC300010077EFA2 /* DejaVuSans-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "DejaVuSans-Bold.ttf"; sourceTree = "<group>"; };
+		7142E87D1DC300010077EFA2 /* DejaVuSans.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = DejaVuSans.ttf; sourceTree = "<group>"; };
 		714B1F3E1C7BF74100539193 /* OrderDetailSignatureCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderDetailSignatureCell.h; path = common/Functions/order/OrderDetailSignatureCell.h; sourceTree = SOURCE_ROOT; };
 		714B1F3F1C7BF74100539193 /* OrderDetailSignatureCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderDetailSignatureCell.m; path = common/Functions/order/OrderDetailSignatureCell.m; sourceTree = SOURCE_ROOT; };
 		715001FD1D114D9100F5927F /* BundleDetailButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleDetailButton.h; path = common/Functions/BundleDetailButton.h; sourceTree = SOURCE_ROOT; };
@@ -890,6 +894,8 @@
 			children = (
 				7142E8781DBF57510077EFA2 /* KALINGA.TTF */,
 				7142E8791DBF57510077EFA2 /* KALINGAB.TTF */,
+				7142E87C1DC300010077EFA2 /* DejaVuSans-Bold.ttf */,
+				7142E87D1DC300010077EFA2 /* DejaVuSans.ttf */,
 			);
 			name = font;
 			sourceTree = "<group>";
@@ -1496,6 +1502,8 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				7142E87E1DC300690077EFA2 /* DejaVuSans-Bold.ttf in Resources */,
+				7142E87F1DC300690077EFA2 /* DejaVuSans.ttf in Resources */,
 				7142E87A1DBF577A0077EFA2 /* KALINGA.TTF in Resources */,
 				7142E87B1DBF577A0077EFA2 /* KALINGAB.TTF in Resources */,
 				713F76C21929F4A7006A7305 /* Images.xcassets in Resources */,

BIN
RedAnt ERP Mobile/iSales-NPD/DejaVuSans-Bold.ttf


BIN
RedAnt ERP Mobile/iSales-NPD/DejaVuSans.ttf


+ 1 - 0
RedAnt ERP Mobile/iSales-NPD/config.h

@@ -12,6 +12,7 @@
 
 #define test_server
 
+#define PDF_DEBUG false
 //#define ENCRYPT_OFF
  
 #define CONTACT_LIST 1

+ 2 - 0
RedAnt ERP Mobile/iSales-NPD/iSales-NPD-Info.plist

@@ -56,6 +56,8 @@
 	<array>
 		<string>KALINGA.TTF</string>
 		<string>KALINGAB.TTF</string>
+		<string>DejaVuSans.ttf</string>
+		<string>DejaVuSans-Bold.ttf</string>
 	</array>
 </dict>
 </plist>

+ 68 - 17
RedAnt ERP Mobile/iSales-NPD/portfolio_3x2.json

@@ -4,8 +4,8 @@
         "height": 612
     },
     "pages": {
-        "count": 1,
-        "page_1": {
+        "count": 2,
+        "page_0": {
             "name": "cover page",
             "header": {},
             "footer": {},
@@ -93,7 +93,7 @@
                 }
             }
         },
-        "page_0": {
+        "page_1": {
             "name": "content page",
             "header": {
                 "type": "group",
@@ -169,14 +169,18 @@
                         "width": 250.66,
                         "height": 244,
                         "items": {
-                            "count": 1,
+                            "count": 7,
                             "item_1": {
-                                "type": "line",
-                                "x0": 10,
-                                "y0": 10,
-                                "x1": 100,
-                                "y1": 100,
-                                "line_width": 0.02
+                                "type": "img",
+                                "source": "img_qr",
+                                "source_type": "data",
+                                "source_path_type": "local",
+                                "hAlign": "Center",
+                                "vAlign": "Middle",
+                                "x": 176,
+                                "y": 81,
+                                "width": 60,
+                                "height": 60
                             },
                             "item_0": {
                                 "type": "img",
@@ -191,15 +195,62 @@
                             },
                             "item_2": {
                                 "type": "text",
-                                "source": "text0",
+                                "source": "special_price",
+                                "source_type": "data",
+                                "size":"10",
+                                "bold": true,
+                                "color":"0xff0000",
+                                "x": 160,
+                                "y": 161,
+                                "width": 90,
+                                "height": 15
+                            },
+                            "item_3": {
+                                "type": "text",
+                                "source": "name",
+                                "source_type": "data",
+                                "size":"12",
+                                "bold": true,
+                                "x": 0,
+                                "y": 159,
+                                "width": 158,
+                                "height": 19
+                            },
+                            "item_4": {
+                                "type": "text",
+                                "source": "description",
+                                "source_type": "data",
+                                "size":"9",
+                                "bold": true,
+                                "x": 0,
+                                "y": 178,
+                                "width": 230,
+                                "height": 13
+                            },
+                            "item_5": {
+                                "type": "text",
+                                "source": "price",
+                                "source_type": "data",
+                                "size":"10",
+                                "bold": true,
+                                "x": 160,
+                                "y": 142,
+                                "width": 90,
+                                "height": 15
+                            },
+                            "item_6": {
+                                "type": "text",
+                                "source": "detail",
                                 "source_type": "data",
-                                "font": "font name",
-                                "size": "15",
-                                "x": 10,
-                                "y": 10,
-                                "width": 100,
-                                "height": 100
+                                "ishtml":true,
+                                "size":"8",
+                                "bold": false,
+                                "x": 0,
+                                "y": 191,
+                                "width": 230,
+                                "height": 53
                             }
+                            
                         }
                     },
                     "x": 0,