Podofoは、PDFファイル形式で動作する無料のポータブルC ++ライブラリです。
Podofoは、PDFファイルを解析し、そのコンテンツをメモリに変更するクラスを提供します。変更は、簡単にディスクに書き戻すことができます。 PDFの解析に加えて、Podofoは、独自のPDFファイルをゼロから作成するための機能も提供します。現在、PDFコンテンツのレンダリングをサポートしていません。
Podofo libを構築するには、C ++ 17コンパイラ、Cmake 3.16および次のライブラリ(示されている暫定的な最小バージョン)が必要です。
最も人気のあるツールチェーンの場合、ポドフォには次の最小バージョンが必要です。
次のIDE/ツールチェーンバージョンで定期的にテストされています。
GCC 8.Xサポートは最近壊れましたが、復活する可能性があります。
Podofo Libraryは、LGPL 2.0以降の条件でライセンスされています。 Podofoツールは、GPL 2.0以降の条件でライセンスされています。
Podofoは、多数のパッケージマネージャー( apt-get 、Brew、VCPKG、Conanを含む)を通じてコンパイルされることが知られており、Ubuntu Linux、MacOS、Windowsで動作する公開統合があり、Cmakeプロジェクトのブートストラップ、ライブラリの構築とテストが行われます。このようなパッケージマネージャーを使用してPodofoを構築することを強くお勧めします。
リポジトリには、人気のあるアーキテクチャ/オペレーティングシステムのビルド前依存関係にアクセスできる遊び場エリアもあります。遊び場は、ライブラリを開発し、バグを再現するための推奨設定ですが、Podofoを使用したアプリケーションの展開にはお勧めしません。そこにあるreadmeを見てください。
警告:ポドフォは、相互コンパイルツールチェーン(Android/iOS開発など)で機能していることが知られていますが、そのようなシナリオではサポートが提供されない場合があります。依存関係を手動で構築することにした場合、ライブラリの衝突/ミスマッチの可能性と、システム内で発生する可能性のある問題に対処する方法を特定する方法を知っていると想定されます。
ソースルートの実行から:
sudo apt-get install -y libfontconfig1-dev libfreetype-dev libxml2-dev libssl-dev libjpeg-dev libpng-dev libtiff-dev libidn11-dev
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug
Brewをインストールしてから、ソースルートの実行から:
brew install fontconfig freetype openssl libxml2 jpeg-turbo libpng libtiff libidn cmake
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_PREFIX_PATH=`brew --prefix` -DFontconfig_INCLUDE_DIR=`brew --prefix fontconfig`/include -DOPENSSL_ROOT_DIR=`brew --prefix openssl@3` ..
cmake --build . --config Debug
コナンをインストールしてから、ソースルート実行から:
mkdir build
cd build
conan install ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug
VCPKG QuickStartガイドに従って、最初にPackage Managerリポジトリをセットアップします。 Windowsでは、環境変数VCPKG_DEFAULT_TRIPLETをx64-windowsに設定して、64ビット依存関係をデフォルトにインストールし、クイックスタートで作成されたリポジトリの位置を持つVCPKG_INSTALLATION_ROOT変数を定義することも役立ちます。
次に、ソースルート実行から:
vcpkg install fontconfig freetype libxml2 openssl libjpeg-turbo libpng tiff zlib
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=C:vcpkgscriptsbuildsystemsvcpkg.cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug
PODOFO_BUILD_TEST :ユニットテストを作成し、デフォルトはtrueになります。
PODOFO_BUILD_EXAMPLES :例を作成し、デフォルトはtrueになります。
PODOFO_BUILD_UNSUPPORTED_TOOLS :Podofoツールを構築すると、デフォルトはfalseになります。 readmeの関連セクションを参照してください。
PODOFO_BUILD_LIB_ONLY :trueの場合、ライブラリコンポーネントのみを構築します。これは、構築テスト、例、ツールを無条件に無効にします。
PODOFO_BUILD_STATIC :Trueの場合、静的オブジェクトとしてライブラリを構築し、テスト、例、ツールで使用します。デフォルトでは、共有ライブラリが構築されています。
Podofoの静的ビルドを使用したい場合、Podofo Cmakeプロジェクトを含めている場合は非常に簡単です。 cmakeプロジェクトで次のようなことを行います。
set(PODOFO_BUILD_LIB_ONLY TRUE CACHE BOOL "" FORCE)
set(PODOFO_BUILD_STATIC TRUE CACHE BOOL "" FORCE)
add_subdirectory(podofo)
# ...
target_link_libraries(MyTarget podofo::podofo)
Podofoの事前コンパイルされた静的ビルドとリンクしている場合、これはサポートが制限されるシナリオです。本当にリンクエラーを識別して修正できるはずです。一般的なステップは次のとおりです。
PODOFO_STATICコンピレーションの定義をプロジェクトに追加するか、 podofo.hを含める前に追加します。podofo.a 、 podofo_private.a (またはpodofo.lib 、 podofo_private.lib with msvc)およびすべての従属ライブラリをリンクします。 APIドキュメントは、https://podofo.github.io/podofo/documentation/にあります。
前提条件:マシンにドキシゲンをインストールしていることを確認してください。そうでない場合は、Doxygenの公式Webサイトにアクセスしてダウンロードしてインストールしてください。
ドキュメントの生成:開発QuickStartの章で詳述されているビルドプロセスを完了した後、Podofoのソースコードのルートディレクトリに移動します。端末またはコマンドプロンプトを開き、次のコマンドを実行します。
doxygen build/Doxyfileドキュメントの表示:ドキュメントの生成が完了したら、生成されたドキュメントを含むdocumentationディレクトリが見つかります。お気に入りのWebブラウザでindex.htmlを開き、APIドキュメントを表示します。
cd build/doxygen/documentation
open index.htmlすべてのstd::stringsまたはstd::string_view in the Libraryは、UTF-8エンコードされた文字列コンテンツを保持することを目的としています。 PdfStringおよびPdfNameコンストラクターは、デフォルトでUTF-8エンコード文字列を受け入れます( PdfName PdfDocEncoding Charセットの文字のみを受け入れます)。代わりに、 charbuff Abd bufferview一般的なオクテットバッファーを表します。
Podofoには、Podofo 0.9.xの広範なAPIレビューの結果である不安定なAPIがあります。このリンクでは、0.9.8コードの移行に関する不完全なガイドを0.10.0に見つけることができます。レビュープロセスが完了するとすぐに、ポドフォが安定したAPIに収束することが予想されます。詳細については、APIの安定性を参照してください。
警告:ツールは現在、サポートされておらず、テストされておらず、維持されていません。
Podofoツールはソースツリーで引き続き利用できますが、それらは未調整/維持されていないため、デフォルトではコンピレーションが無効になり、ステータスがクリアされるまでサポートを受けません。それらをソフトウェア分布に含めることはお勧めしません。それらを構築したい場合は-DPODOFO_BUILD_UNSUPPORTED_TOOLS=TRUEでCmakeプロジェクトをブートストラップしてください。ツールは、少なくともライブラリの変更が編集を破らないようにするために、少なくとも遊び場で便利に有効になります。
TODOリストがあります。または、問題トラッカーを見てください。
Q:ドキュメントに署名するにはどうすればよいですか?
A: Podofo Headは、非常に強力で、 CMS構造を手動で提供することなくドキュメントに署名できる高レベルの署名手順を提供するようになりました。デフォルトでは、Modern PAdES-Bコンプライアンスプロファイルを備えたドキュメントへの署名をサポートしていますが、レガシーPKCS7の署名のサポートもあります。 asn.1エンコードx509証明書とRSA秘密キーの両方を提供すると、次のコードでドキュメントに署名できます。
auto inputOutput = std::make_shared<FileStreamDevice>(filepath, FileMode::Open);
PdfMemDocument doc;
doc.Load(inputOutput);
auto & page = doc.GetPages().GetPageAt( 0 );
auto & signature = page.CreateField<PdfSignature>( " Signature " , Rect ());
auto signer = PdfSignerCms(x509certbuffer, pkeybuffer);
PoDoFo::SignDocument (doc, *inputOutput, signer, signature);また、外部署名サービスやメモリバッファーでドキュメントに署名するサポートもあります。ユニットテストのさまざまな署名例を参照してください。
Q:イベントベースの手順を使用してドキュメントに署名できますか?
はい、古い低レベルの手順は変更されておらず、まだ利用可能です。手順を簡単に説明するには、 PdfSigner完全に実装し、 PdfSignatureフィールドを取得または作成し、出力デバイスを作成し(次の質問を参照)、 PoDoFo::SignDocument(doc, device, signer, signature)を使用する必要があります。署名すると、 PdfSignatureの一連の呼び出しがこのように機能します:Method PdfSigner::Reset()が最初に呼ばれ、次にPdfSigner::ComputeSignature(buffer, dryrun)が空のバッファとdryrun引数をtrue設定します。このコールでは、署名に必要なサイズを過大評価するバッファーを変更するか、バッファに保存する必要がある偽の署名を計算することができます。次に、 PdfSigner::AppendData(buffer)のシーケンスが呼び出され、署名するすべてのドキュメントデータを受信します。最終的なPdfSigner::ComputeSignature(buffer, dryrun)と呼ばれ、 dryrunパラメーターがfalseに設定されています。この呼び出しのバッファーはクリアされます(容量は変更されません)、またはそれに応じてPdfSigner::SkipBufferClear()の値にはなりません。
Q: PdfMemDocument::SaveUpdate()またはPoDoFo::SignDocument()部分的なファイルのみを書き込む:ポドフォ0.9.xのように増分更新をシームレスに処理するメカニズムがない理由ドキュメントを正しく更新/署名するにはどうすればよいですか?
A: Podofo 0.9.xの以前のメカニズムには、インクリメンタル更新のためにドキュメントの有効化が必要でした。これは、不要であると思われる決定ステップです。また:
ドキュメントがロードされた場所からインクリメンタルアップデートを実行する必要があるという事実を明確にする別の戦略、またはバッファロードされたドキュメントの場合にその後の操作に続いて根底にあるバッファーがその後の操作を増加させるという事実を利用できます。ファイルまたはバッファーからロードされたドキュメントを更新するための正しい操作を示すいくつかの例に従います。
auto inputOutput = std::make_shared<FileStreamDevice>(filename, FileMode::Open);
PdfMemDocument doc;
doc.Load(inputOutput);
doc.SaveUpdate(*inputOutput);charbuff outputBuffer;
FileStreamDevice input (filepath);
auto inputOutput = std::make_shared<BufferStreamDevice>(outputBuffer);
input.CopyTo(*inputOutput);
PdfMemDocument doc;
doc.Load(inputOutput);
doc.SaveUpdate(*inputOutput);署名文書は同じ手法で行うことができます。他の質問を読んで、その他の例を読んでください。
Q:2回目のドキュメントに署名できますか?
A:はい、これはテストされていますが、これが機能するようにするために、すでにロードされたドキュメントを再利用することはまだテストされていないため、ドキュメントを再び繰り返すために2回目に再び配置することができます(これは後で変更される可能性があります)。たとえば、次のようにすることができます。
auto inputOutput = std::make_shared<FileStreamDevice>(filepath, FileMode::Open);
{
PdfMemDocument doc;
doc. Load (inputOutput);
auto & page = doc. GetPages (). GetPageAt ( 0 );
auto & signature = page. CreateField <PdfSignature>( " Signature1 " , Rect ());
PdfSignerCms signer (x509certbuffer, pkeybuffer);
PoDoFo::SignDocument (doc, *inputOutput, signer, signature);
}
{
PdfMemDocument doc;
doc. Load (inputOutput);
auto & page = doc. GetPages (). GetPageAt ( 0 );
auto & signature = page. CreateField <PdfSignature>( " Signature2 " , Rect ());
PdfSignerCms signer (x509certbuffer, pkeybuffer);
PoDoFo::SignDocument (doc, *inputOutput, signer, signature);
}Podofoはあなたのニーズのために働くかもしれないし、そうでないかもしれず、まったく保証がありません。セキュリティの欠陥を含む深刻なバグは、任意の時間枠に固定されているか、まったく固定されていない場合があります。新機能とバグ修正の実装の優先順位は、メンテナーの関心と個人的な好みに応じて決定されます。ワークフローに不可欠な機能またはバグ修正を統合するためにポドフォが必要な場合、最も歓迎されていて最速のアプローチは、高品質のパッチを提供することです。
Podofoの元の開発者の何人かがまだ続いているプロジェクトメーリングリストを購読してください。また、より非公式のおしゃべりを容易にするために、ギターコミュニティも作成されています。バグを見つけて修正方法を知っている場合、または小さな機能を追加する場合は、プロジェクトのコーディングスタイルに従ってプルリクエストを送信してください。最小限の必要条件として、貢献は次のとおりです。
プルリクエストの拒否または保持の他の理由は次のとおりです。
より大きな機能またはリファクタリングを実装する必要がある場合は、最初に既に計画されているかどうかを尋ねます。この機能は手に入れる可能性があります。つまり、外部の貢献のために開かれていることを意味します。いくつかのフィードバック/調整を受け取るために、あなたがそれに取り組み始めた関連する問題に書いてください。そうでない場合、それはメンテナーによって後でリファクタル/機能が実装されることを計画していることを意味します。この機能が問題にリストされていない場合は、それを追加したり、ディスカッションを作成してフィードバックを受け取り、基本的な設計の選択肢について話し合います。
警告:テクニカルサポートInquriesには個人用メールアドレスを使用しないでください。代わりにGitHubの問題を作成してください。
Podofoは現在、Dominik Seichterなどとともに、Francesco Prettoによって開発および維持されています。詳細については、ファイルauthors.mdを参照してください。