ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PDFium 라이브러리 삽질기 - 7
    Libraries 2019. 12. 30. 17:32

    PDFium 라이브러리 삽질기 - 7

    윈도우에서 사용하기 (2)

    작성일자: 2019년 12월 30일

    작성자: N3




    앞에서 Windows DLL 을 빌드하는 방법을 다루어보았다.

    이번에는 PDFium.dll 을 실제 사용하는 예제를 함께 빌드해서, 제대로 동작하는지 테스트해 본다.


    1. PDFium Viewer

    PDFium 라이브러리를 사용하는 C# 으로 작성된 라이브러리다.


    Pdfium Viewer 는 현재 개발은 중단되었으며, 사용하기 위해서는 pdfiumviewer.cpp 를 pdfium 빌드에 추가해야 한다.


    위 소스를 pdfium/fpdfsdk 폴더에 복사하고, 해당 폴더의 BUILD.gn 파일에 다음을 추가한다.


    source_set("fpdfsdk") {

      sources = [

        "cpdfsdk_actionhandler.cpp",

        "cpdfsdk_actionhandler.h",

        "cpdfsdk_annot.cpp",

    ...

        "ipdfsdk_annothandler.h",

        "pdfiumviewer.cpp",

      ]



    Dynamic DLL 을 새로 만든다.

    • FPDF_EXPORT void FPDF_CALLCONV FPDF_AddRef()
    • FPDF_EXPORT void FPDF_CALLCONV FPDF_Release()
    두 개의 함수가 Export 되어서 보인다.


    Github 에서 소스를 내려받으면, 빌드된 DLL 이 packages 폴더에 있다.

    PDFiumViewer 는 DLL 이며, 실행 프로그램은 아니다.


    이 프로젝트에는 두 개의 Viewer 샘플 프로그램이 들어 있다. WPF 와 일반 C# 데모 뷰어다.

    소스의 Packages 폴더에 이미 빌드된 DLL 이 들어 있으며, 프로젝트 파일에서 해당 DLL 을 데모 프로그램의 폴더에 복사하도록 되어 있다.


    해당 DLL 을 바꿔치거나 알아서 적당히 사용하면 된다.


    private static bool TryLoadNativeLibrary(string path)

            {

                if (path == null)

                    return false;


                path = Path.Combine(path, IntPtr.Size == 4 ? "x86" : "x64");

                path = Path.Combine(path, "Pdfium.dll");


                // 테스트를 위한 임의 수정

                if (!File.Exists(path))

                    return false;

                IntPtr handle = LoadLibrary(path);

                if (handle == IntPtr.Zero)

                {

                    return false;

                }

                return true;

            }

    실행 플랫폼에 따라 x86 폴더와 x64 에서 DLL 을 찾고 있다.


    참고로, x64 윈도우에서 아래 옵션을 추가해서 x86 DLL 을 빌드하면 된다.

    target_cpu = "x86"


    혹시  DLL 파일을 찾았는데 DLL 을 찾지 못해 오류가 나는 경우,

    D:\PDF\pdfium\out\viewer>dumpbin /DEPENDENTS pdfium.dll

    Microsoft (R) COFF/PE Dumper Version 14.24.28314.0

    Copyright (C) Microsoft Corporation.  All rights reserved.



    Dump of file pdfium.dll


    File Type: DLL


      Image has the following dependencies:


        ADVAPI32.dll

        GDI32.dll

        USER32.dll

        KERNEL32.dll

        icuuc.dll

        zlib.dll

        MSVCP140.dll

        VCRUNTIME140.dll

        api-ms-win-crt-runtime-l1-1-0.dll

        api-ms-win-crt-string-l1-1-0.dll

        api-ms-win-crt-stdio-l1-1-0.dll

        api-ms-win-crt-math-l1-1-0.dll

        api-ms-win-crt-convert-l1-1-0.dll

        api-ms-win-crt-time-l1-1-0.dll

        api-ms-win-crt-utility-l1-1-0.dll

        api-ms-win-crt-heap-l1-1-0.dll

        api-ms-win-crt-environment-l1-1-0.dll

        api-ms-win-crt-filesystem-l1-1-0.dll

    위 4개의 DLL 을 추가 복사해서 사용한다.

    API-MS 로 시작하는 것들은 대개 재배포 패키지를 설치하면 될 것이다.


    데모 프로그램을 실행해서, PDF 를 열면 다음과 같이 PDF 내용을 읽을 수 있다.




    3. PDFium Editor 


    PDFium Editor 는 위의 PDFium Viewer 를 개선한 버전이다.

    이름에서 보듯, Editor  기능을 추가했다.

    소스를 내려받고, 설루션 파일을 열어서 빌드해 본다.


    nuget 으로 DataMatrix 를 설치해 준다.

    그리고, 파일이 존재하지 않는 두 개의 파일(GMsign.pfx, key) 은 프로젝트에서 제거한다.


    대충 빌드하고 나니, 예제 프로그램이 아니라, Dynamic Library 만 생성하고 만다.

    예제는 어디에 있는가?


    4. PDFiumSharp Library


    검색결과 PDFium 을 사용하는 두 개의 닷넷 프로그램을 찾았다. 220달러 이상의 상용 라이브러리와  MS-RL 라이센스의 오픈소스 라이브러리다.


    빌드하기 전에 두 개의 텍스트 템플릿 파일(tt) 을 먼저 실행해야 한다.

    • PDFiumSharp\Types\FPDF_Typedefs.tt
    • PDFiumSharp\PDFium.tt
    솔루션 탐색기에서 오른쪽 마우스로 선택한 후,  run(사용자 지정도구 실행) 한다.

    만약, 새로 빌드한 DLL 을 사용할려면, 아래 코드를 맞게 수정하거나, 빌드된 DLL 을 덮어씌워준다.

    const string DllName32 = "pdfium_x86";
    const string DllName64 = "pdfium_x64";


    • PDFiumSharp.dll
    • PDFiumSharp.GdiPlus.dll
    • PDFiumSharp.Wpf.dll
    • PDFiumSharp.Xwt.dll
    4개의 DLL 을 빌드할 수 있다.

    테스트는 samples 폴더의 프로그램을 사용하면 된다.



    'Libraries' 카테고리의 다른 글

    PDFium 라이브러리 삽질기 - 7  (0) 2019.12.30
    PDFium 라이브러리 삽질기 - 6  (0) 2019.12.26

    댓글 0

Designed by Tistory.