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あてにお送りください。
ご購入前の技術的質問も無償で対応します。サポート受付ページからお願いします。