PDFからタグ付きコンテンツを抽出する
Contents
[
Hide
]
この記事では、C#を使用してタグ付きコンテンツPDFドキュメントを抽出する方法を学びます。
以下のコードスニペットは、Aspose.PDF.Drawing ライブラリでも動作します。
タグ付きPDFコンテンツの取得
PDFドキュメントのタグ付きテキストのコンテンツを取得するために、Aspose.PDFはDocument クラスの TaggedContent プロパティを提供しています。
次のコードスニペットは、タグ付きテキストのPDFドキュメントのコンテンツを取得する方法を示しています:
// 完全な例やデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET をご覧ください。
// ドキュメントディレクトリへのパス。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Pdf Documentを作成
Document document = new Document();
// タグ付きPdfのコンテンツを作業用に取得
ITaggedContent taggedContent = document.TaggedContent;
//
// タグ付きPdfコンテンツの作業
//
// ドキュメントのタイトルと言語を設定
taggedContent.SetTitle("Simple Tagged Pdf Document");
taggedContent.SetLanguage("en-US");
// タグ付きPdfドキュメントを保存
document.Save(dataDir + "TaggedPDFContent.pdf");
ルート構造の取得
Tagged PDF Documentのルート構造を取得するために、Aspose.PDFはITaggedContentインターフェースのStructTreeRootElementプロパティとStructureElementを提供しています。次のコードスニペットは、Tagged PDF Documentのルート構造を取得する方法を示しています:
// 完全な例とデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET をご覧ください。
// ドキュメントディレクトリへのパス。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Pdf Documentを作成
Document document = new Document();
// TaggedPdfの作業用コンテンツを取得
ITaggedContent taggedContent = document.TaggedContent;
// ドキュメントのタイトルと言語を設定
taggedContent.SetTitle("Tagged Pdf Document");
taggedContent.SetLanguage("en-US");
// StructTreeRootElementプロパティとRootElementプロパティは、
// PDFドキュメントのStructTreeRootオブジェクトとルート構造要素(ドキュメント構造要素)にアクセスするために使用されます。
StructTreeRootElement structTreeRootElement = taggedContent.StructTreeRootElement;
StructureElement rootElement = taggedContent.RootElement;
子要素にアクセスする
タグ付けされたPDFドキュメントの子要素にアクセスするために、Aspose.PDFはElementListクラスを提供しています。次のコードスニペットは、タグ付けされたPDFドキュメントの子要素にアクセスする方法を示しています:
// 完全な例とデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET にアクセスしてください。
// ドキュメントディレクトリへのパス。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Pdfドキュメントを開く
Document document = new Document(dataDir + "StructureElementsTree.pdf");
// タグ付けされたPdfの作業用のコンテンツを取得
ITaggedContent taggedContent = document.TaggedContent;
// ルート要素にアクセス
ElementList elementList = taggedContent.StructTreeRootElement.ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// プロパティを取得
string title = structureElement.Title;
string language = structureElement.Language;
string actualText = structureElement.ActualText;
string expansionText = structureElement.ExpansionText;
string alternativeText = structureElement.AlternativeText;
}
}
// ルート要素の最初の要素の子要素にアクセス
elementList = taggedContent.RootElement.ChildElements[1].ChildElements;
foreach (Element element in elementList)
{
if (element is StructureElement)
{
StructureElement structureElement = element as StructureElement;
// プロパティを設定
structureElement.Title = "title";
structureElement.Language = "fr-FR";
structureElement.ActualText = "actual text";
structureElement.ExpansionText = "exp";
structureElement.AlternativeText = "alt";
}
}
// タグ付けされたPdfドキュメントを保存
document.Save(dataDir + "AccessChildElements.pdf");
既存のPDFで画像にタグを付ける
既存のPDFドキュメントで画像にタグを付けるために、Aspose.PDFはStructureElementクラスのFindElementsメソッドを提供します。FigureElementクラスのAlternativeTextプロパティを使用して、図に代替テキストを追加できます。
以下のコードスニペットは、既存のPDFドキュメントに画像にタグを付ける方法を示しています:
// 完全な例とデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET にアクセスしてください。
// ドキュメントディレクトリへのパス。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
string inFile = dataDir + "TH.pdf";
string outFile = dataDir + "TH_out.pdf";
string logFile = dataDir + "TH_out.xml";
// ドキュメントを開く
Document document = new Document(inFile);
// タグ付けされたコンテンツとルート構造要素を取得
ITaggedContent taggedContent = document.TaggedContent;
StructureElement rootElement = taggedContent.RootElement;
// タグ付けされたPDFドキュメントのタイトルを設定
taggedContent.SetTitle("画像付きドキュメント");
foreach (FigureElement figureElement in rootElement.FindElements<FigureElement>(true))
{
// 図の代替テキストを設定
figureElement.AlternativeText = "図の代替テキスト (技法2)";
// BBox属性を作成して設定
StructureAttribute bboxAttribute = new StructureAttribute(AttributeKey.BBox);
bboxAttribute.SetRectangleValue(new Rectangle(0.0, 0.0, 100.0, 100.0));
StructureAttributes figureLayoutAttributes = figureElement.Attributes.GetAttributes(AttributeOwnerStandard.Layout);
figureLayoutAttributes.SetAttribute(bboxAttribute);
}
// スパン要素を段落に移動(最初のTDで間違ったスパンと段落を見つける)
TableElement tableElement = rootElement.FindElements<TableElement>(true)[0];
SpanElement spanElement = tableElement.FindElements<SpanElement>(true)[0];
TableTDElement firstTdElement = tableElement.FindElements<TableTDElement>(true)[0];
ParagraphElement paragraph = firstTdElement.FindElements<ParagraphElement>(true)[0];
// スパン要素を段落に移動
spanElement.ChangeParentElement(paragraph);
// ドキュメントを保存
document.Save(outFile);
// 出力ドキュメントのPDF/UAコンプライアンスを確認
document = new Document(outFile);
bool isPdfUaCompliance = document.Validate(logFile, PdfFormat.PDF_UA_1);
Console.WriteLine(String.Format("PDF/UAコンプライアンス:{0}", isPdfUaCompliance));