Evince is pretty easy to embed.

Sent from Mail for Windows 10

From: teso...@gmail.com
Sent: Sunday, November 5, 2017 10:25 AM
To: Any question about pharo is welcome
Subject: Re: [Pharo-users] Embedded PDF viewer?

Hello Ben, 
   UFFI does not allow you to call static libraries. Static libraries are not 
executable per se, they need to be linked in another program.
As I know, the only way of using an static library from Pharo is to:
  - Build a plugin that wraps it.
  - Build a DLL exposing all the functions in the library and then they are 
used through UFFI. 

The second option is the easiest to me, but it depends how the library is built 
up. For example, if the library uses a lot of compile time code generation 
(like macros or templates) making a generic DLL is not so easy. 

I think it is better to see if not other project has already tackle this 
problem when using the desired static library. 

Cheers,
Pablo

On Sun, Nov 5, 2017 at 1:39 PM, Ben Coman <b...@openinworld.com> wrote:
I'm looking into calling PDFium from Pharo via FFI.
Currently I'm stalled a bit since it doesn't have a shared-library target.

If you consider access to such a library would be useful to the community, 
please take a few moments to star this issue...
https://bugs.chromium.org/p/pdfium/issues/detail?id=826

cheers -ben


P.S. Can anyone comment on calling into a static library via FFI?



On Wed, Oct 11, 2017 at 2:05 PM, Ben Coman <b...@openinworld.com> wrote:


On Wed, Oct 11, 2017 at 2:03 PM, Ben Coman <b...@openinworld.com> wrote:

> On Tue, Oct 10, 2017 at 8:58 PM, Manuel Leuenberger
> <leuenber...@inf.unibe.ch> wrote:
> > Hi,
> >
> > I want to view a PDF within Pharo. I found that Athens has a PDF canvas, 
> > but I have no idea how to use it. Is there a way to view a PDF within 
> > Pharo, so that I can scroll, zoom, click links etc. in the PDF?
> >
> > Cheers,
> > Manuel


On Wed, Oct 11, 2017 at 3:04 AM, Stephane Ducasse <stepharo.s...@gmail.com> 
wrote:
>
> Hi manuel
>
> So far I do not know if we have this is Pharo.
> I imagine that we would have to build a renderer once we will have the
> PDF reader from Christian library.
>
> Stef

[Edit: Update license link]
 
A renderer will have great synergy with PDFTalk, but I think a proof of concept 
can be done independently.
I've been poking at this topic for a while looking for options.  Coincidentally 
a couple of days I discovered the PDFium library. 
I haven't had time yet to give it a run, but it seems a good candidate since...
* Its a successful commercial product by Foxit built into Chrome converted to 
open source with Google's backing for use in Chromium 
       https://www.foxitsoftware.com/company/press.php?id=305  
* Its license is BSD style 
       https://github.com/hfiguiere/pdfium/blob/master/LICENSE
* Although written in C++ it has a C interface 
      https://github.com/hfiguiere/pdfium/blob/master/public/fpdfview.h
      * Search here on  " Function: "  to skim through
      * Proof of concept seems to only need these key functions...  
          * void    FPDF_RenderPageBitmap( FPDF_BITMAP bitmap,FPDF_PAGE page, 
... )
          * FPDF_BITMAP    FPDFBitmap_Create( int width, int height, int alpha);
          * FPDF_PAGE   FPDF_LoadPage   ( FPDF_DOCUMENT document, int 
page_index )
          * FPDF_DOCUMENT   FPDF_LoadMemDocument   ( const void* data_buf ... )
          * void    FPDF_InitLibrary ()    
* Has a concise getting started for POC... 
      https://github.com/hfiguiere/pdfium/blob/master/docs/getting-started.md
* Maybe useful fork with V8 disabled by default 
      https://github.com/klokantech/pdfium 
* Master repo here 
      https://pdfium.googlesource.com/pdfium/

So Pharo might load a PDF file into a ByteArray, pass that to 
FPDF_LoadMemDocument() & FPDF_LoadPage(), 
then get a bitmap back from FPDFBitmap_Create() & FPDF_RenderPageBitmap() and 
display the result in a Pharo window.

The rest of this week I'm working 12 hour days on a mine site.  I could try it 
out once I'm home, but in the meantime is anyone else keen to try it? 

cheers -ben






-- 
Pablo Tesone.
teso...@gmail.com

Reply via email to