2016-08-05 16 views
2

私はテーブルを作成するためのコードは非常に単純です、itext7を使用:生成されたpdfテーブルからテキストをコピーする方法は?

float[] tableWidth = {75, 75, 75}; 

    Table table1 = new Table(tableWidth); 
    table1.addHeaderCell("head \n1"); 
    table1.addHeaderCell("head \n2"); 
    table1.addHeaderCell("head \n3"); 
    table1.addCell("column 1"); 
    table1.addCell("column 2"); 
    table1.addCell("column 3"); 

    Table table2 = new Table(tableWidth); 
    table2.addHeaderCell("head 1"); 
    table2.addHeaderCell("head 2"); 
    table2.addHeaderCell("head 3"); 
    table2.addCell("column 1"); 
    table2.addCell("column 2"); 
    table2.addCell("column 3"); 

    document.add(table1); 
    document.add(new Paragraph("\n")); 
    document.add(table2); 

私は2つのテーブルを作成し、唯一の違い:表1にヘッドが改行「\ n」はである:

ここまでは問題ありません。しかし、私の質問は、私が選択して、生成されたPDFファイルからテーブルをコピーしてMS-Wordに貼り付けようとしたところ、別の結果が得られました。

私のpraticalコードと同じように、テーブルヘッドに「\ n」を使用する必要があります。これで、テーブルをコピーして正しく貼り付けることができませんでした。

答えて

0

私のpraticalコードと同じように、テーブルの頭に "\ n"を使用する必要があります。この場合、テーブルは正しく貼り付けられませんでした。

一般的には、テーブルの内容は、テーブル構造を尊重する方法で、PDFから貼り付け&をコピーすることができることをあなたの仮定は、間違っています。

PDFであなたの表1の描画命令は、次のとおりです。

  • は、113.5で "頭" を描き、790.83
  • は38.5で、 "1" を描き、38.5で772.85
  • を "頭" を描きます790.83
  • 772.85
  • は790.83
  • は188.5で "3" を描画し、188.5で "ヘッド" を描画し、113.5で "2" を描き、772.85
  • から111まで、806から36、806〜36、765.04
  • ドローライン261.25から35.75まで、806から10
  • ドローライン、806
  • ドローライン35.75、765.04から261.25まで、765.04
  • ドローライン、 186から765.04
  • ドローライン、186から806、261から765.04
  • ドローライン、806 261に、765.04
  • ドロー "欄1" 38.5で、749.87
  • ドロー "欄2" 113.5で、 749.87
  • ドロー188.5の "3列"、35.75から749.87
  • ドローライン、765.04 261.25まで、35.75から765.04
  • ドローライン、742.05 261.25まで、36から742.05
  • ドローライン、765.04 36に、742.05
  • 261から261まで、765.04から 111から
  • ドローライン、111から765.04、742.05
  • 186からドローライン、186から765.04、742.05
  • ドローライン、742。05

したがって、テーブルが存在することはもうありません。したがって、単純なテキスト抽出メカニズムは文字列を引き出しながら抽出し、y座標が変更されたときに改行を挿入し、上下に区別することなく改行を挿入します。結果はあなたが観察するものです。


PDFはHTML'ish指標と描画命令をタグ付けするために、しかし、オプションを持っています。 iTextの7を使用すると、あなたのPdfDocumentインスタンスにタグ付け機構を起動することができます

PdfDocument pdfDocument = new PdfDocument(pdfWriter); 
pdfDocument.setTagged(); 
Document document = new Document(pdfDocument); 
... 

今、あなたのtable1にこの

head1  head2  head3 
column 1 column 2 column 3 

よう&をWordに貼り付けコピーされ

TablesToCopyAndPasteFrom.javaから抜粋)実際のWordテーブルとして。残念ながら、いくつかの小さな不具合があります(例: 「頭」と数字の間のスペースがなくなった。誰が責任を負うのかわからない、iText、Adobe Reader、Word。


PS:「頭」と数間消失スペースでグリッチが1月27日のチェックインでiTextの開発バージョン7.0.2-SNAPSHOTに固定されているようです。

関連する問題