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
    14065
    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.
    • 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