2016-07-12 9 views
1

でクラスをシリアル化JSONファイルを作成します。 ArrayListのJSONファイルとして、自動化する方法がわからないので、オブジェクトや何かをシリアライズすることを考えましたが、これに対する解決策を見つけることができず、どのようにして作成できるかわかりませんPDFValuesオブジェクトは直列化可能です。私は以下のクラスを持っているJavaの

これらの値をJSONファイルに保存してプロパティとして使用してPDFファイルを生成するには、PDFファイルの生成にPDFBoxを使用し、.jsonファイルの場合はSimpleJSONを使用します。

私はいくつかの処理されたデータから数千のpdfファイルを生成しなければならないプロジェクトに取り組んでいます。私はすでに約500MB以上のテキストで構成されたデータを解析し、PDFとして生成する必要がある約5,000件の口座情報を保持しています。

テキストデータがPDFで生成されているということは、文字列内の開始文字の位置をPDFValuesに指定し、PDFTextInfoオブジェクトを生成してPDFファイルに追加する必要があります画像やテキストなどを含む必要があります。

注:私がしようとしていることを達成するためのよりよい方法がある場合は、私は提案には触れていますが、私は何をしようとしているのか、どちらの場合にも理由があります。

できるだけ速くコードを作成したいのですが、今は2分以内にRAWから大部分のデータを消去することができますが、今は最適化されている可能性がありますD

私はできるだけ早くPDFファイルを生成したいと思いますが、私はそのプロジェクトをJavaで1 1/2ヶ月の間使っています。先週のJSONとPDFファイルの生成... JSONファイルで3日間作業していましたが、少し失われています。

これは私が達成しようとしているJSONファイルの出力例です。このファイルを手動で生成し、ファイルを読み込んで処理すると、自動的に生成しようとしています:

{ "ヘッダ":{ "フルネーム": { "名前": "アヌビスLockward Botello"、 "水平":180、 "垂直":633 }、 .....より多くの要素..... } }

ご覧のとおり、PDFファイルの要素をHEADER、BALANCES、TRANSACTIONSなどのパネルのように分割して、パズルのようにPDFファイルを構築しようとしていますが、今私はヘッダーに名前要素を "ビルド"しようとしています。

答えて

1

私は、PDFファイルを作成してファイルを読み直すよりも良い方法があると思いますが、私はあなたのJSON質問に対して1つの答えを提供できます。

Apache commons-lang3ライブラリを使用して、ToStringBuilderを調べます。オブジェクトにtoString()メソッドを定義し、組み込みのToStringStyle.JSON_STYLEフォーマットを使用することができます。その後、

@Override 
public String toString() { 

    return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) 
      .append("Name", value) 
      .append("Horizontal", xPos) 
      .append("Vertical", yPos) 

      .toString(); 
} 

...ヘッダー、フルネームのためPDFValueを保存することができますいくつかの他のオブジェクトなどにPDFValuesのリストをラップする必要があり、私はあなたに注釈を付ける、あなたは Jacksonまたは類似のライブラリに引くことができることに留意すべきであると思います必要な JsonPropertyアノテーションを持つオブジェクトを作成し、ライブラリを使用してRESTなどと同様にオブジェクトをJSONにシリアル化します。しかし、あなたのような単純なユースケースでは、 ToStringBuilderはシンプルで効果的です。

+0

おかげで、しかし、何がPDFファイルを構築するためのより良い方法だろう:私は正しい出力を得るでしょう、ところで、ここでJSON文字列からの結果の値がですか?私は書き込みを作成し、別のファイルを読むことからそれを生成することは遅いかもしれませんが、私はより良い方法の答えを見つけることができません...私は1つでなければならないことを知っています –

+0

私はPDF生成をしばらく行っていません私はその時点で使っていたライブラリの名前を思い出すことができません(編集:iText(http://itextpdf.com/)でした)。私はそれがオープンソースプロジェクトだと信じていますが、私は確信しています [iText](http://itextpdf.com/)または[PDFBox](https://pdfbox.apache.org)を見て、それらがあなたのPDFに適しているかどうかを確認してください – JudgingNotJudging

+0

私はPDFファイルを使用していたと言っています。とにかく、PDFファイルを生成するための良い方法がわからないのですが、助けてくれてありがとう、提案したものを適用する方法を見つけました。 ToStringBuilderをtoStringメソッドの中に入れて、今度はデコレータを使用して要素内の値を "ラップ"し、そのinsiを配置しますデ "コンテナ" ...あなたの助けをいただきありがとうございます。 –

0

[OK]私はJudgingNotJudgingに感謝しました。私は自分の答えを取ってオブジェクトにデコレータパターンを適用していましたので、PDFContainerの一部であるPDFElementの中にPDFValueがあるように、それはこのように書きます:

Header: (this is our PDFContainer) 
    FullName: (so, Header HAS-A FullName element) 
    PDFValue: (and FullName HAS-A a PDFValue, that has the Name or value to be shown, and the X and Y coordinates inside the PDF) 

ここでは、コードです:

PDFValueクラスはまだ同じである、と私はJudgingNotJudgingの答えに応じてオーバーライドされたのtoString()メソッドを追加しました。

public class PDFValuesDecorator extends PDFValues{ 

} 
PDFValuesDecorator我々は何もしないで

は、私達はちょうど私たちは私たちが行動を追加したいクラスの正しい型を持つようにPDFValuesを拡張し、まだすべてに共通のタイプを取得するつもりです私たちがこのようにして作るかもしれない別のクラス。我々は、我々はそれに何かを「追加」することができるように「ラップ」しようとしているオブジェクトのインスタンスを保存するコンストラクタで

public class PDFElement extends PDFValuesDecorator { 
    private PDFValues pdfValue; 
    private String elementID; 

    public PDFElement(PDFValues pdfValue, String elementID){ 
     this.pdfValue = pdfValue; 
     this.elementID = elementID; 
    } 

    @Override 
    public String toString() {  
     return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) 
       .append(elementID, pdfValue.toString()) 
       .toString(); 
    } 

} 

。この例では、要素のIDを追加しています。要素のtoString()メソッドを変更して、PDFValueのtoString()メソッドをインクルードして、両方の値が適切な値注文。

最後に、ここに私の主な方法です:

public class PDFtoJSONTest {  

    public static void main(String[] args) { 
     List<PDFValues> listaElementos = new ArrayList<PDFValues>(); 

     PDFValues name = 
       new PDFValues(
           "Anubis Lockward Botello", 
           new Integer(100), 
           new Integer(633) 
          ); 

     PDFElement fullName = new PDFElement(name, "FullName"); 
     PDFElement header = new PDFElement(fullName, "Header"); 

     listaElementos.add(header); 

     for(PDFValues value : listaElementos){    
      System.out.println("Valor: " + value.toJSONString());   
     } 
    } 
} 

あなたが見ることができるように、私が最初にすることはPDFValuesのArrayListのを作成し、その後、私は名前値のための単一のオブジェクトを作成し、その名前はあるが、 FullName要素の中にラップされ、それがHeader要素内に格納されます。ご覧のように、私はListオブジェクトを渡して、私が望むものであればそれを行うことができます。

また、イメージやもののような他のPDFElementsを作成することもできますし、それらをすべてArrayList内に保存して渡すことができます。次に保存するときは、toStringメソッドを1回呼び出す必要があります。あなたの答えのための

Valor: {"Header":"{"FullName":"{"Name":"Anubis Lockward Botello","Horizontal":100,"Vertical":633}"}"} 
関連する問題