2016-12-28 4 views
-1

itext7を初めて使用しています。
私はcolumndocumentrendererの例を見ました。以下のコード。itext7を使用してPDFの3つの列レイアウトを持つ

package com.itextpdf.highlevel.chapter02; 

import com.itextpdf.io.font.FontConstants; 
import com.itextpdf.kernel.font.PdfFont; 
import com.itextpdf.kernel.font.PdfFontFactory; 
import com.itextpdf.kernel.geom.PageSize; 
import com.itextpdf.kernel.geom.Rectangle; 
import com.itextpdf.kernel.pdf.PdfDocument; 
import com.itextpdf.kernel.pdf.PdfWriter; 
import com.itextpdf.layout.ColumnDocumentRenderer; 
import com.itextpdf.layout.Document; 
import com.itextpdf.layout.element.AreaBreak; 
import com.itextpdf.layout.element.Paragraph; 
import com.itextpdf.layout.hyphenation.HyphenationConfig; 
import com.itextpdf.layout.property.AreaBreakType; 
import com.itextpdf.layout.property.TextAlignment; 
import com.itextpdf.test.annotations.WrapToTest; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

/** 
* 
* @author RNDPC-03 
*/@WrapToTest 
public class C02E08_JekyllHydeV4 { 


    public static final String SRC = "src/main/resources/txt/jekyll_hyde.txt"; 
    public static final String DEST = "results/chapter02/jekyll_hyde_v4.pdf"; 

    public static void main(String args[]) throws IOException { 
     File file = new File(DEST); 
     file.getParentFile().mkdirs(); 
     new C02E08_JekyllHydeV4().createPdf(DEST); 
    } 

    public void createPdf(String dest) throws IOException { 
     //Initialize PDF document 
     PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 

     // Initialize document 
     Document document = new Document(pdf); 

     //Set column parameters 
     float offSet = 36; 
     float gutter = 23; 
     float columnWidth = (PageSize.A4.getWidth() - offSet * 2)/2 - gutter; 
     float columnHeight = PageSize.A4.getHeight() - offSet * 2; 

     //Define column areas 
     Rectangle[] columns = { 
      new Rectangle(offSet, offSet, columnWidth, columnHeight), 
      new Rectangle(offSet + columnWidth + gutter, offSet, columnWidth, columnHeight)}; 
     document.setRenderer(new ColumnDocumentRenderer(document, columns));  

     PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN); 
     PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); 
     document.setTextAlignment(TextAlignment.JUSTIFIED) 
      .setFont(font) 
      .setHyphenation(new HyphenationConfig("en", "uk", 3, 3)); 

     BufferedReader br = new BufferedReader(new FileReader(SRC)); 
     String line; 
     Paragraph p; 
     boolean title = true; 
     AreaBreak nextArea = new AreaBreak(AreaBreakType.NEXT_AREA); 
     while ((line = br.readLine()) != null) { 
      p = new Paragraph(line); 
      if (title) { 
       p.setFont(bold).setFontSize(12); 
       title = false; 
      } 
      else { 
       p.setFirstLineIndent(36); 
      } 
      if (line.isEmpty()) { 
       document.add(nextArea); 
       title = true; 
      } 
      document.add(p); 
     } 

     //Close document 
     document.close(); 
    } 
} 

この結果は次のようになります。

enter image description here

下の写真は、今私は3(3)のカラムにそれを作りたいです。これを行う方法?誰にも分かりますか?またはちょうど私を導く。ありがとうございました!あなたは二つの列定義のはここ

+0

親愛なるdownvoters、なぜdownvoteを教えていただけますか?ありがとう。 – Matthias

+0

私はなぜ彼らがダウン投票したのかわからない、再び、私は私の答えが受け入れられなかった理由を知らない... –

答えて

2

は次のとおりです。3つの列に、これを変更する

float offSet = 36; 
float gutter = 23; 
float columnWidth = (PageSize.A4.getWidth() - offSet * 2)/2 - gutter; 
float columnHeight = PageSize.A4.getHeight() - offSet * 2; 

//Define column areas 
Rectangle[] columns = { 
    new Rectangle(offSet, offSet, columnWidth, columnHeight), 
    new Rectangle(offSet + columnWidth + gutter, offSet, columnWidth, columnHeight)}; 

を非常に簡単ではありません。

ちょうどこのような何かによって、上記のすべてを置き換えます

Rectangle[] columns = { 
    new Rectangle(20, 20, 180, 802), 
    new Rectangle(207, 15, 180, 802), 
    new Rectangle(394, 15, 180, 802) }; 

columnsは3 Rectangleの要素を持っていることを、3つの列が描画されます。 3つの列が希望のサイズを持たない場合は、,y,およびheightの値をRectangleコンストラクターで自由に調整してください。

+0

こんにちはサーブルーノは、それはうまく動作します、今私の問題は、このコードですtxtファイルのみに制限されていますか? iveはpdfを使って試してみましたが、出力は良くありません。どのようにするか知っていますか?私の文書はpdf形式ではありません。 –

+0

元の文書形式がPDFの場合、この回答に記載されているコードは機能しません。あなたのコメントはあなたの元の質問とはまったく関係のない全く新しい質問ですので、**新しい質問として投稿するべきです** ** PDFは**ワープロ形式ではありません**ページはページですページです。 PDFの内容がテキストとして動作することは期待できません。ページ上のすべてのコンテンツは絶対的な位置に追加されますが、必ずしもあなたが望む順序ではありません。 –

関連する問題