PDF to Image Converter(画像に変換) C++サンプルと解説
「PDF to Image Converter」は、PDF文書を単一(TIFF、JPEG他)または、複数ページの画像(TIFF)または、画像化されたPDFに変換する機能を
アプリケーションに追加するライブラリ(API)
です。
機能、特徴
機能、特徴
- 単一または複数の画像を生成
- 画像フォーマット:TIFF、JPEG、JBIG2、JPEG2000、PNG、GIF、BMP など
- ラスタライズされたPDF文書を作成可能
- PDF文書の復号と暗号化可能
- 画像フィルター(スーパーサンプリング、バイキュービック、バイリニア)の設定でエイリアスやモアレを低減
- 色空間(グレースケール、RGB、CMYK、インデックス)選択可
- 解像度、色数 設定
- 非可逆圧縮やロスレスJPEG2000またはJBG2圧縮を選択可
- 画質やサイズ(非可逆圧縮)の最適化
- ハーフトーン方式(Floyd Steinberg、half-tone matrixなど)を選択可
- 微細なテキスト文字の線幅を太くする
廉価(低価格)版
PDFを画像に変換するライブラリの機能を限定した廉価(低価格)版を参照してください。
無償評価版のダウンロードとインストール
ライブラリ(評価版API)は無償でダウンロード(試用)できますので、PDF to Image Converterダウンロード手順を参照してダウンロードください。
ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルの実行前に、bin/Pdf2ImgOCX.dll、bin/Pdf2PdfImgOCX.dllをサンプル実行イメージと同じフォルダーにコピーしてください。また、無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。
ライセンスキーの登録方法はこちらです。
ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | P2IA.jar,PCIA.jar(Javaのラッパー) |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
C++のサンプルと解説
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "pdf2imgapi_c.h" //#pragma comment(lib,"Pdf2ImgOCX.lib") //従来のレンディング・エンジン #pragma comment(lib,"Pdf2ImgAPI.lib") //新しいレンディング・エンジン int main(int argc, char* argv[]) { TPdf2Img* pDocument; int iPage; int iResult; int iLen; int iNr; char cPageNo[8]; char cOut[256]; char* cExt; int iOnePer = 0; int iPageFrom = 1; int iPageTo = 100000; float fDPI = 96.0f; TPDFErrorCode uLastError = 0; // 引数チェック if(argc > 1){ iNr = 1; while(iNr < argc && argv[iNr][0] == '-'){ if(strcmp("-1", argv[iNr]) == 0) iOnePer = 1; else if(strcmp("-d", argv[iNr]) == 0 && iNr+1<argc) fDPI = (float)atoi(argv[++iNr]); else if(strcmp("-pg", argv[iNr]) == 0 && iNr+2<argc){ iPageFrom = atoi(argv[++iNr]); iPageTo = atoi(argv[++iNr]); } else fprintf(stderr, "不明なオプション: %s\n", argv[iNr]); iNr++; } } if(argc < 2){ printf("Usage: pdf2imgsample [options] input.pdf output.(img)"); return 3; } // 初期化 Pdf2ImgInitialize(); // インスタンス生成 pDocument = Pdf2ImgCreateObject(); // PDF文書をオープン if(!Pdf2ImgOpenA(pDocument, argv[argc-2], "")){ uLastError = Pdf2ImgGetErrorCode(pDocument); if(uLastError == PDF_E_PASSWORD) printf("PDFファイル %s はパスワードが必要です\n", argv[argc-2]); else{ printf("PDFファイル %s オープンエラー\n", argv[argc-2]); printf("Error 0x%X\n", uLastError); } return 1; } // 向きを指定 Pdf2ImgSetRotate(pDocument, eRotateAttribute); // 画像の形式を取得 iLen = (int) strlen(argv[argc-1]); if(iLen > 3){ if(strncmp(argv[argc-1]+iLen-4, ".", 1) == 0) cExt = argv[argc-1]+iLen-3; else if(strncmp(argv[argc-1]+iLen-5, ".", 1) == 0) cExt = argv[argc-1]+iLen-4; else{ fprintf(stderr, "ファイルタイプが認識できません\n"); return 3; } }else return 3; // 画像にタイプがTIFFの場合は、LZWで圧縮する Pdf2ImgSetCompression(pDocument, eComprLZW); Pdf2ImgSetDPI(pDocument, fDPI); if(strncmp(cExt, "tif", 3) == 0 && strncmp(cExt, "tiff", 4) == 0 && !iOnePer){ // 複数ページの画像を生成 if(!Pdf2ImgCreateImage(pDocument, argv[argc-1])){ printf("出力ファイル %s を作成できません\n",argv[argc-1]); return 2; } for(iPage = iPageFrom; iPage <= (iPageTo < Pdf2ImgGetPageCount(pDocument) ? iPageTo : Pdf2ImgGetPageCount(pDocument)); iPage++) iResult = Pdf2ImgRenderPage(pDocument, iPage); iResult = Pdf2ImgCloseImage(pDocument); }else{ // ページごとに別のファイルを生成 for(iPage = iPageFrom; iPage <= (iPageTo < Pdf2ImgGetPageCount(pDocument) ? iPageTo : Pdf2ImgGetPageCount(pDocument)); iPage++){ // 出力ファイルを生成 strcpy(cOut, argv[argc-1]); cOut[iLen-strlen(cExt)-1] = '\0'; strcat(cOut, _itoa(iPage, cPageNo, 10)); strcat(cOut, "."); strcat(cOut, cExt); if(!Pdf2ImgCreateImage(pDocument, cOut)){ printf("出力ファイル %s を作成できません\n",cOut); return 2; } iResult = Pdf2ImgRenderPage(pDocument, iPage); iResult = Pdf2ImgCloseImage(pDocument); } } // ファイルをクローズし、インスタンスを開放する iResult = Pdf2ImgClose(pDocument); Pdf2ImgDestroyObject(pDocument); Pdf2ImgUnInitialize(); return 0; }
サンプルコード
C++ PDF to Image サンプル (MS Visual Studio 2008 Project) P2Icpp_v2.zip
ご質問、お問い合わせ
(記載の会社名および製品名は、各社の登録商標および商標です。)