OEM販売のご相談

PDFマルチ変換ライブラリ機能紹介:PDFをXML形式に変換

PDFをPDFXML形式に変換

PDFファイルを読み込み、内部のコンテンツ(テキスト・表・図・画像など)を平易なXML形式に変換して出力します。 本ライブラリで出力するXML形式を「Antenna House PDFXML形式」(以下、PDFXML形式)と呼びます。

各コンテンツの詳細な情報を取り出すことで、PDFデータをさまざまな用途に再利用できます。

PDFをPDFXML形式に変換

PDFXML形式とは

  • PDFXML形式は、「アンテナハウス株式会社」が定義した、PDFの文書構造を表現するためのXML形式です。PDFXML形式の詳細は、PDFXMLの仕様書をご参照ください。
  • PDFXML形式はPDFのコンテンツをテキスト・表・画像などの情報単位にまとめ、分かりやすく扱いやすい表現に置き換えることで、データの再利用を容易にします。
  • PDFXML形式を利用して各コンテンツの詳細な情報を取り出すことで、PDFデータをさまざまな用途に再利用できます。
  • PDFXML形式は、
    • カタログXML(pdf2tmp_catalog.xml)
    • スタイルXML(pdf2tmp_style.xml)
    • ドキュメントXML(pdf2tmp.xml)
    • 画像ファイル
    など複数のファイルから構成されます。

PDFから取り出せる情報

PDFに含まれるコンテンツを扱いやすい形式に変換して、PDFXML形式のファイルや画像データとして取り出します。

段落・行・文字情報

  • テキストを段落・行・文字ごとの情報に分類します。
  • 段落・行・文字を囲む矩形の位置とサイズを出力します。
  • インデント・行間・文字間の値を出力します。
  • 文字情報(文字の大きさ・文字の色・文字のフォント・文字修飾(bold/italic、網かけ))を出力します。

表(行・セル)情報

  • 線画などを使い一定のパターンで描画された領域を表とみなし、表情報を生成します。
  • 表・行・セルの位置とそれらを囲む矩形のサイズを出力します。
  • セル情報には段落・行・文字の情報を含んで出力します。

画像情報

  • PDFに含まれる画像データは、外部ファイルとして出力します。
  • PDFに含まれる線画データは既定値でSVG形式に変換しますが、オプションでEMF形式に出力することも可能です。
  • PDFXML形式への変換時に指定可能なオプションについては、オンラインマニュアルをご参照ください。
  • 本ライブラリで変換したサンプルをご参照ください。

XSLTスタイルシートで他の文書形式に変換

XSLTスタイルシートで他の文書形式に変換

本ライブラリで出力したPDFXML形式のファイルを、XSLTスタイルシートを利用して他の文書形式に変換することができます。

変換可能な文書形式

  • TEXT
  • HTML
  • XHTML
  • DocBook
  • fo、PDF
  • PDFXMLを利用するために、サンプルXSLTスタイルシートをご用意しています。
  • XSLTスタイルシートの利用例につきましては、サンプルをご参照ください。

PDFXMLリーダーインターフェイスで活用

PDFXMLリーダーインターフェイスで活用

PDFXMLリーダーは、PDFXML形式のリーダーです。
プログラムで簡単にPDFXML形式を利用可能になります。

本ライブラリで出力したPDFXMLをお客様の開発する .NET アプリケーションからダイレクトにハンドリング可能にするため、PDFXMLリーダーインターフェイスを公開します。

  • PDFXMLリーダーインターフェイスの詳細は、オンラインマニュアルをご参照ください。
  • PDFXMLリーダーインターフェイスの呼び出し例を以下に示します。

サンプルコード

      // AdcAHPDFXMLReader C# sample プログラム
      // 
      // Copyright (C) 2025, Antenna House, Inc.  All Rights Reserved.
      // 

      using System;
      using System.Collections;
      using System.IO;
      using System.Text;
      using AHPDFXMLReader;

      public class MainApp
      {
         static public void Main(string[] args)
         {
            if (args.Length < 1)
            {
               Console.WriteLine("usage: sample CatalogXmpFilePath");
               return;
            }

            try
            {
               AhpXMLReader ahpReader = new AhpXMLReader();
               ahpReader.Load(args[0]);
               // スタイルXML
               AhpStyles ahpStyles = ahpReader.GetStyles();
               // ドキュメントXML
               AhpDocument ahpDoc = ahpReader.GetDocument();
               // ドキュメントに含まれるページ
               for (int p = 0; p < ahpDoc.GetNumberOfPage(); p++)
               {
                  AhpPage ahpPage = ahpDoc.GetPage(p);
                  Console.WriteLine(
                     "--- " +
                     "PageNo:" + p.ToString() + 
                     ", Width:" + ahpPage.GetWidth().ToString() + 
                     ", Height:" + ahpPage.GetHeight().ToString() +
                     " ---");
                  // ページに含まれるセクション
                  for (int s = 0; s < ahpPage.GetNumberOfSections(); s++)
                  {
                     AhpSection ahpSection = ahpPage.GetSection(s);
                     // セクションに含まれるフレーム
                     for(int f = 0; f < ahpSection.GetNumberOfFrames(); f++)
                     {
                        AhpFrame ahpFrame = ahpSection.GetFrame(f);
                        string frameType = ahpFrame.GetFrameType();
                        // テキストフレーム
                        if (frameType.Equals(AhpTypesExtension.GetValue(AhpTypes.TEXT)))
                        {
                           // フレームに含まれるパラグラフ
                           for(int g = 0; g < ahpFrame.GetNumberOfParagraphs(); g++)
                           {
                              AhpParagraph ahpParagraph = ahpFrame.GetParagraph(g);
                              // パラグラフに含まれる行
                              for(int l = 0; l < ahpParagraph.GetNumberOfLines(); l++)
                              {
                                 AhpLine ahpLine = ahpParagraph.GetLine(l);
                                 // 行に含まれる文字
                                 for(int r = 0; r < ahpLine.GetNumberOfRuns(); r++)
                                 {
                                    AhpRun ahpRun = ahpLine.GetRun(r);
                                    // 文字のスタイルIDからフォント情報を取り出す
                                    string cid = ahpRun.GetCid();
                                    AhpStyleRun ahpStyleRun = ahpStyles.GetRun(cid);
                                    AhpFont ahpFont = ahpStyleRun.GetFont();
                                    string encoding = ahpFont.GetEncoding();
                                    string name = ahpFont.GetName();
                                    float size = ahpFont.GetSize();
                                    // 同じスタイルIDを持つ文字列を取り出す
                                    string characters = ahpRun.GetCharacters();
                                    Console.Write(characters);
                                 }
                                 Console.WriteLine("");
                              }
                           }
                        }
                     }
                  }
               }
               Console.WriteLine("\nsample success.");
            }
            finally
            {
            }
         }
      }