omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello β€” I'm @olemoritz on Twitter.


    How to access VisionKit?

    Pythonista
    help needed objcutil
    5
    43
    14152
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • mikael
      mikael @JonB last edited by

      @JonB said:

      @cvp can PIL do multipage PDF? I guess you still would need to do the ui2pil type business.

      Which I guess would make it slow in a way that this type of use case does not reslly tolerate.

      Playing with the idea of a truly personalized doc scanner that would put the scan whete it needs to go. Also, combining this with the text recognition stuff would be good (as soon as they get international characters right).

      1 Reply Last reply Reply Quote 0
      • JonB
        JonB last edited by

        But the built in objc methods for writing to PDF (see link above) ought to be reasonably fast. I haven't tried.

        cvp 2 Replies Last reply Reply Quote 0
        • cvp
          cvp @JonB last edited by

          @JonB said:

          can PIL do multipage PDF? I guess you still would need to do the ui2pil type business.

          I don't think it does multi pages, but easy to do it yourself via PdfFileMerger.
          Yes for ui2pil

          1 Reply Last reply Reply Quote 0
          • cvp
            cvp @JonB last edited by

            @JonB said:

            But the built in objc methods for writing to PDF (see link above) ought to be reasonably fast. I haven't tried

            I have already done the inverse (PDF -> image) via Objectivec context.. quick πŸ™„

            1 Reply Last reply Reply Quote 0
            • emkay_online
              emkay_online @cvp last edited by

              @cvp Thank you so much for this code. It works a treat and really gives me a solid foundation to build on.

              Also thank you for giving me a good grounding in the objc_util module - it's certainly a complex one, especially for someone with no iOS coding experience.

              Thank you.

              cvp 1 Reply Last reply Reply Quote 0
              • cvp
                cvp @emkay_online last edited by

                @emkay_online you should dismiss the viewcontroller in the didcancel delegate, not in the didfinish like I did for testing only. This if you want to process multiple scans

                1 Reply Last reply Reply Quote 0
                • cvp
                  cvp @JonB last edited by cvp

                  @JonB said:

                  But the built in objc methods for writing to PDF (see link above) ought to be reasonably fast. I haven't tried.

                  Please applaus. ok, I exaggerate πŸ˜‚, but was not so easy (for me)

                  from objc_util import *
                  import ui
                  
                  UIGraphicsGetCurrentContext = c.UIGraphicsGetCurrentContext
                  UIGraphicsGetCurrentContext.restype = c_void_p
                  UIGraphicsGetCurrentContext.argtypes = []
                  
                  UIGraphicsBeginPDFContextToData = c.UIGraphicsBeginPDFContextToData
                  UIGraphicsBeginPDFContextToData.restype = None
                  UIGraphicsBeginPDFContextToData.argtypes = [c_void_p, CGRect, c_void_p]
                  
                  UIGraphicsBeginPDFPage = c.UIGraphicsBeginPDFPage
                  UIGraphicsBeginPDFPage.restype = None
                  UIGraphicsBeginPDFPage.argtypes = []
                  
                  UIGraphicsEndPDFContext = c.UIGraphicsEndPDFContext
                  UIGraphicsEndPDFContext.restype = None
                  UIGraphicsEndPDFContext.argtypes = []
                  
                  pdfdata = NSMutableData.alloc()#.init()
                  ui_image = ui.Image.named('test:Lenna')
                  uiimage = ObjCInstance(ui_image)
                  w,h = ui_image.size
                  frame = CGRect(CGPoint(0, 0), CGSize(w, h))	
                  UIGraphicsBeginPDFContextToData(pdfdata, frame, None)
                  UIGraphicsBeginPDFPage()
                  pdfContext = UIGraphicsGetCurrentContext()
                  uiimage.drawInRect_(frame)
                  UIGraphicsEndPDFContext()
                  # just to be sure that pdfdata is ok
                  with open('a.pdf',mode='wb') as fil:
                  	b = nsdata_to_bytes(pdfdata)
                  	fil.write(b) 
                  
                  1 Reply Last reply Reply Quote 1
                  • JonB
                    JonB last edited by JonB

                    πŸ‘πŸ‘πŸ‘

                    If you are going straight to file, you might consider using

                    https://developer.apple.com/documentation/uikit/1623927-uigraphicsbeginpdfcontexttofile?language=objc

                    instead of creating the context as nsdata. Might save a few lines.

                    Also, you can use drawAtPoint instead of drawInRect, so that you don't need to specify w,h.

                    I think if you omit the frame when you create the context, it also create an 8.5x11.

                    cvp 2 Replies Last reply Reply Quote 0
                    • cvp
                      cvp @JonB last edited by cvp

                      @JonB said:

                      so that you don't need to specify w,h.

                      Yes but UIGraphicsBeginPDFContextToData needs it also

                      Γ‰dit: sorry, written before reading your last line

                      1 Reply Last reply Reply Quote 0
                      • cvp
                        cvp last edited by

                        I don't say it is the best way, it was only an exercice for me.

                        1 Reply Last reply Reply Quote 0
                        • cvp
                          cvp @JonB last edited by cvp

                          @JonB said:

                          instead of creating the context as nsdata.

                          I added the file lines only to test /check pdfdata.

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Powered by NodeBB Forums | Contributors