PDF文書のメタデータを読みだしたり、変更して書き込んだりします。
ニーズに合わせて読み出したり、変更する項目を選択できます。
APIリファレンス(英文)はこちらです。
Pdftools SDK の Metadataクラス(C#、C/C++)を使用してPDF文書のメタデータを読み出します。
たとえば、PDF文書の作成順に検索したり、特定の作成者のPDF文書を検索したりできます。
Pdftools SDK の MetadataSettingクラス(C#、C/C++)を使用してPDF文書のメタデータを変更します。
変更するメータデータを個別に指定することも、特定のPDF文書のメタデータをコピーすることも容易です。
C#のサンプルプロジェクトではPdftools SDKライブラリ(DLL)をNuGetから自動でダウンロードします。
Cのサンプルの場合は最新バージョンのライブラリ(DLL)をダウンロードしてください。
ライセンスキー無し(無償)で試用できます。ただし、結果に「透かし」が入ります。
「透かし」の削除をご希望の場合は問い合わせページまたはメールでお問い合わせください。
License Agreement(利用許諾契約書)は必ず確認してください。
PDF文書にメタデータを各項目ごとに追加したり、別のPDF文書のメタデータをコピーしたりします。
#define BUFFER_SIZE 256 TCHAR buffer[BUFFER_SIZE]; // Initialize library PdfTools_Initialize(); // 既定では、テスト用ライセンスが有効です。ただし、結果に「透かし」が追加されます。 // ライセンスキーを取得している場合は、以下のラインのコメントを外しライセンスキーをセットしてください。 // GOTO_CLEANUP_IF_FALSE_PRINT_ERROR(PdfTools_Sdk_Initialize(_T("ここにライセンスキーをセット"), NULL), // _T("Failed to set the license key. %s (ErrorCode: 0x%08x).\n"), szErrorBuff, // PdfTools_GetLastError()); // 入力ファイルを開く _tfopen_s(&pInStream, szInPath, _T("rb")); GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pInStream, _T("Failed to open the input file \"%s\" for reading.\n"), szInPath); TPdfToolsSys_StreamDescriptor inDesc; PdfToolsSysCreateFILEStreamDescriptor(&inDesc, pInStream, 0); pInDoc = PdfToolsPdf_Document_Open(&inDesc, _T("")); GOTO_CLEANUP_IF_NULL_PRINT_ERROR( pInDoc, _T("Failed to create a document from the input file \"%s\". %s (ErrorCode: 0x%08x).\n"), szInPath, szErrorBuff, PdfTools_GetLastError()); TPdfToolsPdf_MetadataSettings* metaSet = PdfToolsPdf_MetadataSettings_New(); TPdfToolsPdf_Document* metaDoc = NULL; if (szMetaPath) { // 参照するPDF if (!_tfopen_s(&pMetaStream, szMetaPath, _T("rb"))) { TPdfToolsSys_StreamDescriptor metaDesc; PdfToolsSysCreateFILEStreamDescriptor(&metaDesc, pMetaStream, 0); metaDoc = PdfToolsPdf_Document_Open(&metaDesc, NULL); if (metaDoc) { TPdfToolsPdf_Metadata* meta = PdfToolsPdf_Document_GetMetadata(metaDoc); if (meta) { if (PdfToolsPdf_Metadata_GetTitle(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetTitle(metaSet, buffer); if (PdfToolsPdf_Metadata_GetAuthor(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetAuthor(metaSet, buffer); if (PdfToolsPdf_Metadata_GetSubject(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetSubject(metaSet, buffer); if (PdfToolsPdf_Metadata_GetKeywords(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetKeywords(metaSet, buffer); if (PdfToolsPdf_Metadata_GetCreator(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetCreator(metaSet, buffer); if (PdfToolsPdf_Metadata_GetProducer(meta, buffer, BUFFER_SIZE)) PdfToolsPdf_MetadataSettings_SetProducer(metaSet, buffer); TPdfToolsSys_Date date; if (PdfToolsPdf_Metadata_GetCreationDate(meta, &date)) PdfToolsPdf_MetadataSettings_SetCreationDate(metaSet, &date); if (PdfToolsPdf_Metadata_GetModificationDate(meta, &date)) PdfToolsPdf_MetadataSettings_SetModificationDate(metaSet, &date); } else goto Local_Set; } else goto Local_Set; } else goto Local_Set; } else { Local_Set: PdfToolsPdf_MetadataSettings_SetTitle(metaSet, _T("Title")); PdfToolsPdf_MetadataSettings_SetAuthor(metaSet, _T("someAuthor")); PdfToolsPdf_MetadataSettings_SetSubject(metaSet, _T("Subject")); PdfToolsPdf_MetadataSettings_SetCreator(metaSet, _T("someCreator")); PdfToolsPdf_MetadataSettings_SetProducer(metaSet, _T("someProducer")); } // 参照PDFを閉じる if (metaDoc) PdfToolsPdf_Document_Close(metaDoc); if (pMetaStream) fclose(pMetaStream); // 出力Streamを作成 _tfopen_s(&pOutStream, szOutPath, _T("wb+")); GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pOutStream, _T("Failed to create output file \"%s\" for writing.\n"), szOutPath); TPdfToolsSys_StreamDescriptor outDesc; PdfToolsSysCreateFILEStreamDescriptor(&outDesc, pOutStream, 0); // 出力オプション TPdfToolsPdf_OutputOptions* outOpt = PdfToolsPdf_OutputOptions_New(); PdfToolsPdf_OutputOptions_SetMetadataSettings(outOpt, metaSet); // 出力 TPdfToolsOptimization_Optimizer* opt = PdfToolsOptimization_Optimizer_New(); PdfToolsOptimization_Optimizer_OptimizeDocument(opt, pInDoc, &outDesc, (TPdfToolsOptimizationProfiles_Profile*)PdfToolsOptimizationProfiles_MinimalFileSize_New(), outOpt);
private static void AddMetadata(string inPath, string outPath, string mDataFile) { //入力ファイル using var inStream = File.OpenRead(inPath); var inDoc = Document.Open(inStream); //メタデータ作成 MetadataSettings metaSet = new MetadataSettings(); try { using var mStr = File.OpenRead(mDataFile); var mDoc = Document.Open(mStr); var meta = mDoc.Metadata; metaSet.Author = meta.Author == "" ? "" : meta.Author; metaSet.CreationDate = meta.CreationDate == null ? null : meta.CreationDate; metaSet.Creator = meta.Creator == "" ? "" : meta.Creator; metaSet.ModificationDate = meta.ModificationDate == null ? null : meta.ModificationDate; metaSet.Producer = meta.Producer == "" ? "" : meta.Producer; metaSet.Subject = meta.Subject == "" ? "" : meta.Subject; metaSet.Title = meta.Title == "" ? "" : meta.Title; } catch (Exception) { metaSet.Author = "someAuther"; metaSet.CreationDate = DateTimeOffset.Now; metaSet.Creator = "someCreator"; metaSet.ModificationDate = DateTimeOffset.Now; metaSet.Producer = "SomeProducer"; metaSet.Subject = "Subject"; metaSet.Title = "Title"; } //出力オプション var outOpt = new OutputOptions(); outOpt.MetadataSettings = metaSet; //出力PDFのProfile var profile = new MinimalFileSize(); //出力Stream作成 using var outStr = File.Create(outPath); //出力PDF作成 using var outDoc = new Optimizer().OptimizeDocument(inDoc, outStr, profile, outOpt); }
他の機能サンプルを参照してください。
質問のページからお送りいただくようお願いします。
または、メールでsupport@trustss.co.jpあてにお送りください。
ご購入前の技術的質問も無償で対応します。サポート受付ページからお願いします。