PDFファイルタグの編集
タグ付きPDFは、テキスト、画像、リンクなどの各要素に目的と役割を定義するタグを付けることで、アクセシビリティを確保するように設計されています。これらのPDFを編集する際には、WCAGのようなアクセシビリティ基準に準拠するために、これらのタグを保持することが重要です。
Aspose.PDF for .NETのようなツールは、タグ付きコンテンツを扱うための強力な機能を提供しますが、文書の構造とアクセシビリティを維持するために注意が必要です。画像に代替テキストを体系的に追加したり、段落をフォーマットしたりすることで、タグ付きPDFはアクセシブルでユーザーフレンドリーなまま保たれます。
24.7リリース以降、タグ付きPDFの編集の一環として、Aspose.Pdf.LogicalStructure.Element にメソッドが追加されました:
タグ(画像、テキスト、リンクなどの特定のオペレーターにタグを追加)。
InsertChild。
RemoveChild。
ClearChilds。
これらのメソッドを使用すると、PDFファイルタグを編集できます。例えば:
.NET Core 3.1
Copy
private static void EditTags ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
using ( var document = new Aspose . Pdf . Document ( dataDir + "EditTags.pdf" ))
{
var page = document . Pages [ 1 ];
Aspose . Pdf . Operators . BDC imageBdc = null ;
Aspose . Pdf . Operators . BDC text1BDC = null ;
Aspose . Pdf . Operators . BDC link1Bdc = null ;
Aspose . Pdf . Operators . BDC link2Bdc = null ;
Aspose . Pdf . Operators . BDC helloBdc = null ;
for ( int i = 1 ; i <= page . Contents . Count ; i ++)
{
Aspose . Pdf . Operator op = page . Contents [ i ];
var bdc = op as Aspose . Pdf . Operators . BDC ;
if ( bdc != null )
{
if ( bdc . Properties . MCID == 0 )
{
helloBdc = bdc ;
}
}
var doXobj = op as Aspose . Pdf . Operators . Do ;
if ( doXobj != null )
{
imageBdc = new Aspose . Pdf . Operators . BDC ( "Figure" );
page . Contents . Insert ( i - 2 , imageBdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
var tx = op as Aspose . Pdf . Operators . TextShowOperator ;
if ( tx != null )
{
if ( tx . Text . Contains ( "efter Ukendt forfatter er licenseret under" ))
{
text1BDC = new Aspose . Pdf . Operators . BDC ( "P" );
page . Contents . Insert ( i - 1 , text1BDC );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
if ( tx . Text . Contains ( "CC" ))
{
link1Bdc = new Aspose . Pdf . Operators . BDC ( "Link" );
page . Contents . Insert ( i - 1 , link1Bdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
if ( tx . Text . Contains ( "Dette billede" ))
{
link2Bdc = new Aspose . Pdf . Operators . BDC ( "Link" );
page . Contents . Insert ( i - 1 , link2Bdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
}
}
Aspose . Pdf . Tagged . ITaggedContent tagged = document . TaggedContent ;
Aspose . Pdf . LogicalStructure . Element helloParagraph = tagged . RootElement . ChildElements [ 1 ];
helloParagraph . ClearChilds ();
Aspose . Pdf . LogicalStructure . MCRElement helloMCR = helloParagraph . Tag ( helloBdc );
Aspose . Pdf . LogicalStructure . StructureAttributes helloAttrs = helloMCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var helloSpaceAfter = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . SpaceAfter );
helloSpaceAfter . SetNumberValue ( 30.625 );
helloAttrs . SetAttribute ( helloSpaceAfter );
Aspose . Pdf . LogicalStructure . FigureElement figure = tagged . CreateFigureElement ();
tagged . RootElement . InsertChild ( figure , 2 );
figure . AlternativeText = "A fly." ;
Aspose . Pdf . LogicalStructure . MCRElement figureMCR = figure . Tag ( imageBdc );
Aspose . Pdf . LogicalStructure . StructureAttributes figureAttrs = figureMCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var figureSpaceAfter = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . SpaceAfter );
figureSpaceAfter . SetNumberValue ( 3.625 );
figureAttrs . SetAttribute ( figureSpaceAfter );
var figureBBox = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . BBox );
figureBBox . SetArrayNumberValue ( new double ?[] { 71.9971 , 375.839 , 523.299 , 714.345 });
figureAttrs . SetAttribute ( figureBBox );
var figurePlacement = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . Placement );
figurePlacement . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . Placement_Block );
figureAttrs . SetAttribute ( figurePlacement );
Aspose . Pdf . LogicalStructure . Element p2 = ( Aspose . Pdf . LogicalStructure . StructureElement ) tagged . RootElement . ChildElements [ 3 ];
p2 . ClearChilds ();
Aspose . Pdf . LogicalStructure . SpanElement span1 = tagged . CreateSpanElement ();
Aspose . Pdf . LogicalStructure . StructureAttributes span1Attrs = span1 . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var span1TextDecorationType = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationType );
span1TextDecorationType . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextDecorationType_Underline );
span1Attrs . SetAttribute ( span1TextDecorationType );
var span1TextDecorationThickness = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationThickness );
span1TextDecorationThickness . SetNumberValue ( 0 );
span1Attrs . SetAttribute ( span1TextDecorationThickness );
var span1TextDecorationColor = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationColor );
span1TextDecorationColor . SetArrayNumberValue ( new double ?[] { 0.0196075 , 0.384308 , 0.756866 });
span1Attrs . SetAttribute ( span1TextDecorationColor );
p2 . AppendChild ( span1 );
Aspose . Pdf . LogicalStructure . MCRElement text1MCR = p2 . Tag ( text1BDC );
Aspose . Pdf . LogicalStructure . StructureAttributes text1Attrs = text1MCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var text1TextAlign = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextAlign );
text1TextAlign . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextAlign_Center );
text1Attrs . SetAttribute ( text1TextAlign );
Aspose . Pdf . LogicalStructure . SpanElement span2 = tagged . CreateSpanElement ();
Aspose . Pdf . LogicalStructure . StructureAttributes span2Attrs = span2 . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var textDecorationType = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationType );
textDecorationType . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextDecorationType_Underline );
span2Attrs . SetAttribute ( textDecorationType );
var textDecorationThickness = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationThickness );
textDecorationThickness . SetNumberValue ( 0 );
span2Attrs . SetAttribute ( textDecorationThickness );
var textDecorationColor = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationColor );
textDecorationColor . SetArrayNumberValue ( new double ?[] { 0.0196075 , 0.384308 , 0.756866 });
span2Attrs . SetAttribute ( textDecorationColor );
p2 . AppendChild ( span2 );
Aspose . Pdf . LogicalStructure . LinkElement link2 = tagged . CreateLinkElement ();
link2 . SetId ( Guid . NewGuid (). ToString ());
span2 . AppendChild ( link2 );
link2 . Tag ( page . Annotations [ 1 ]);
link2 . Tag ( link2Bdc );
Aspose . Pdf . LogicalStructure . LinkElement link1 = tagged . CreateLinkElement ();
link1 . SetId ( Guid . NewGuid (). ToString ());
span1 . AppendChild ( link1 );
link1 . Tag ( page . Annotations [ 2 ]);
link1 . Tag ( link1Bdc );
tagged . RootElement . RemoveChild ( 0 );
document . Save ( dataDir + "EditTags_out.pdf" );
}
}
.NET 8
Copy
private static void EditTags ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
using var document = new Aspose . Pdf . Document ( dataDir + "EditTags.pdf" );
var page = document . Pages [ 1 ];
Aspose . Pdf . Operators . BDC imageBdc = null ;
Aspose . Pdf . Operators . BDC text1BDC = null ;
Aspose . Pdf . Operators . BDC link1Bdc = null ;
Aspose . Pdf . Operators . BDC link2Bdc = null ;
Aspose . Pdf . Operators . BDC helloBdc = null ;
for ( int i = 1 ; i <= page . Contents . Count ; i ++)
{
Aspose . Pdf . Operator op = page . Contents [ i ];
var bdc = op as Aspose . Pdf . Operators . BDC ;
if ( bdc != null )
{
if ( bdc . Properties . MCID == 0 )
{
helloBdc = bdc ;
}
}
var doXobj = op as Aspose . Pdf . Operators . Do ;
if ( doXobj != null )
{
imageBdc = new Aspose . Pdf . Operators . BDC ( "Figure" );
page . Contents . Insert ( i - 2 , imageBdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
var tx = op as Aspose . Pdf . Operators . TextShowOperator ;
if ( tx != null )
{
if ( tx . Text . Contains ( "efter Ukendt forfatter er licenseret under" ))
{
text1BDC = new Aspose . Pdf . Operators . BDC ( "P" );
page . Contents . Insert ( i - 1 , text1BDC );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
if ( tx . Text . Contains ( "CC" ))
{
link1Bdc = new Aspose . Pdf . Operators . BDC ( "Link" );
page . Contents . Insert ( i - 1 , link1Bdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
if ( tx . Text . Contains ( "Dette billede" ))
{
link2Bdc = new Aspose . Pdf . Operators . BDC ( "Link" );
page . Contents . Insert ( i - 1 , link2Bdc );
i ++;
page . Contents . Insert ( i + 1 , new Aspose . Pdf . Operators . EMC ());
i ++;
}
}
}
Aspose . Pdf . Tagged . ITaggedContent tagged = document . TaggedContent ;
Aspose . Pdf . LogicalStructure . Element helloParagraph = tagged . RootElement . ChildElements [ 1 ];
helloParagraph . ClearChilds ();
Aspose . Pdf . LogicalStructure . MCRElement helloMCR = helloParagraph . Tag ( helloBdc );
Aspose . Pdf . LogicalStructure . StructureAttributes helloAttrs = helloMCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var helloSpaceAfter = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . SpaceAfter );
helloSpaceAfter . SetNumberValue ( 30.625 );
helloAttrs . SetAttribute ( helloSpaceAfter );
Aspose . Pdf . LogicalStructure . FigureElement figure = tagged . CreateFigureElement ();
tagged . RootElement . InsertChild ( figure , 2 );
figure . AlternativeText = "A fly." ;
Aspose . Pdf . LogicalStructure . MCRElement figureMCR = figure . Tag ( imageBdc );
Aspose . Pdf . LogicalStructure . StructureAttributes figureAttrs = figureMCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var figureSpaceAfter = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . SpaceAfter );
figureSpaceAfter . SetNumberValue ( 3.625 );
figureAttrs . SetAttribute ( figureSpaceAfter );
var figureBBox = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . BBox );
figureBBox . SetArrayNumberValue ( new double ?[] { 71.9971 , 375.839 , 523.299 , 714.345 });
figureAttrs . SetAttribute ( figureBBox );
var figurePlacement = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . Placement );
figurePlacement . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . Placement_Block );
figureAttrs . SetAttribute ( figurePlacement );
Aspose . Pdf . LogicalStructure . Element p2 = ( Aspose . Pdf . LogicalStructure . StructureElement ) tagged . RootElement . ChildElements [ 3 ];
p2 . ClearChilds ();
Aspose . Pdf . LogicalStructure . SpanElement span1 = tagged . CreateSpanElement ();
Aspose . Pdf . LogicalStructure . StructureAttributes span1Attrs = span1 . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var span1TextDecorationType = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationType );
span1TextDecorationType . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextDecorationType_Underline );
span1Attrs . SetAttribute ( span1TextDecorationType );
var span1TextDecorationThickness = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationThickness );
span1TextDecorationThickness . SetNumberValue ( 0 );
span1Attrs . SetAttribute ( span1TextDecorationThickness );
var span1TextDecorationColor = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationColor );
span1TextDecorationColor . SetArrayNumberValue ( new double ?[] { 0.0196075 , 0.384308 , 0.756866 });
span1Attrs . SetAttribute ( span1TextDecorationColor );
p2 . AppendChild ( span1 );
Aspose . Pdf . LogicalStructure . MCRElement text1MCR = p2 . Tag ( text1BDC );
Aspose . Pdf . LogicalStructure . StructureAttributes text1Attrs = text1MCR . ParentStructureElement . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var text1TextAlign = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextAlign );
text1TextAlign . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextAlign_Center );
text1Attrs . SetAttribute ( text1TextAlign );
Aspose . Pdf . LogicalStructure . SpanElement span2 = tagged . CreateSpanElement ();
Aspose . Pdf . LogicalStructure . StructureAttributes span2Attrs = span2 . Attributes . CreateAttributes ( Aspose . Pdf . LogicalStructure . AttributeOwnerStandard . Layout );
var textDecorationType = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationType );
textDecorationType . SetNameValue ( Aspose . Pdf . LogicalStructure . AttributeName . TextDecorationType_Underline );
span2Attrs . SetAttribute ( textDecorationType );
var textDecorationThickness = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationThickness );
textDecorationThickness . SetNumberValue ( 0 );
span2Attrs . SetAttribute ( textDecorationThickness );
var textDecorationColor = new Aspose . Pdf . LogicalStructure . StructureAttribute ( Aspose . Pdf . LogicalStructure . AttributeKey . TextDecorationColor );
textDecorationColor . SetArrayNumberValue ( new double ?[] { 0.0196075 , 0.384308 , 0.756866 });
span2Attrs . SetAttribute ( textDecorationColor );
p2 . AppendChild ( span2 );
Aspose . Pdf . LogicalStructure . LinkElement link2 = tagged . CreateLinkElement ();
link2 . SetId ( Guid . NewGuid (). ToString ());
span2 . AppendChild ( link2 );
link2 . Tag ( page . Annotations [ 1 ]);
link2 . Tag ( link2Bdc );
Aspose . Pdf . LogicalStructure . LinkElement link1 = tagged . CreateLinkElement ();
link1 . SetId ( Guid . NewGuid (). ToString ());
span1 . AppendChild ( link1 );
link1 . Tag ( page . Annotations [ 2 ]);
link1 . Tag ( link1Bdc );
tagged . RootElement . RemoveChild ( 0 );
document . Save ( dataDir + "EditTags_out.pdf" );
}