2017-03-20 3 views
0

サンプルAFPファイルがあります。TLE(Tag Logical Element)を読み込んで、口座番号や請求番号などの所定のタグを取得して、特定の請求書番号のPDFに変換できるようにします。また、同じアクションを実行するためのパブリックJava APIもあります。AFPファイルからメタデータを抽出する方法は?

答えて

0

TLEには、グループレベルとページレベルの2種類があります。グループレベルのTLEは、BNG(Begin Named Group)の直後に表示され、ページレベルのTLEはページの環境グループ(BPG)の後に表示されます。 TLE自体は、メタデータを運ぶために2つのトリプレット、FullyQualifiedNameとAttributeValueを使用します。最初のものはキー名を含み、もう1つは値を含みます。

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Optional; 

import org.afplib.afplib.*; 
import org.afplib.base.*; 
import org.afplib.io.AfpInputStream; 

public class DumpTLE { 

public static void main(String[] args) { 
    try (AfpInputStream in = new AfpInputStream(
      new BufferedInputStream(new FileInputStream(args[0])))) { 

     int page = 0; 
     int group = 0; 
     boolean pageLevel = false; 
     SF sf; 
     while((sf = in.readStructuredField()) != null) { 

      if(sf instanceof BPG) { 
       page++; 
       pageLevel = true; 
      } 
      if(sf instanceof EPG) { 
       pageLevel = false; 
      } 
      if(sf instanceof BNG) { 
       group++; 
      } 

      if(sf instanceof TLE) { 
       TLE tle = (TLE) sf; 

       Optional<FullyQualifiedName> fqn = tle.getTriplets().stream() 
         .filter(FullyQualifiedName.class::isInstance).map(FullyQualifiedName.class::cast) 
         .findFirst(); 
       Optional<AttributeValue> value = tle.getTriplets().stream() 
         .filter(AttributeValue.class::isInstance).map(AttributeValue.class::cast) 
         .findFirst(); 

       if(fqn.isPresent() && value.isPresent()) { 
        if(pageLevel) { 
         System.out.println("page "+page+" - "+fqn.get().getFQName()+":"+value.get().getAttVal()); 
        } else { 
         System.out.println("group "+group+" - "+fqn.get().getFQName()+":"+value.get().getAttVal()); 
        } 
       } 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

} 

コードがafplib(https://github.com/yan74/afplib)を使用しています。あなたのAFPはよく形成された次のコードは、あなたがTLESからメタデータを抽出することができますことを前提に

。あなたのAFPをPDFに変換することは全く別の話ですが、それほど簡単ではありません。

関連する問題