2016-05-29 10 views
1

問題があります。どのように進めるのが本当にわかりません。ページ(写真の青い部分)に四角形を描き、同じ矩形を同じページ(緑色のページ)のテンプレートでは、テンプレートの矩形が大きくなります。誰か手がかりがありますか?テンプレートの矩形サイズがちょっと混乱している

実行し、次のクラス:

public class RectangleTemplate { 

public static void main(String[] args){ 



    try { 
     File file = new File("rectagnleTemplate_" + System.currentTimeMillis() + ".pdf"); 
     FileOutputStream fileout = new FileOutputStream(file); 
     Document document = new Document(); 
     PdfWriter writer = PdfWriter.getInstance(document, fileout); 


     document.open(); 

     Rectangle rectangleOnPage = new Rectangle(20, 20, 100, 100); 
     rectangleOnPage.setBorderColor(BaseColor.BLUE); 
     rectangleOnPage.setBorder(Rectangle.BOX); 
     rectangleOnPage.setBorderWidth(2); 

     PdfContentByte canvas = writer.getDirectContent(); 
     canvas.rectangle(rectangleOnPage); 
     canvas.stroke(); 

     PdfTemplate template = canvas.createTemplate(document.getPageSize().getWidth(), document.getPageSize() 
       .getHeight()); 

     template.rectangle(rectangleOnPage.getLeft(), rectangleOnPage.getBottom(), rectangleOnPage.getRight(), 
       rectangleOnPage.getTop()); 

     template.setColorFill(BaseColor.GREEN 
          ); 

     template.fill(); 
     template.stroke(); 

     canvas.addTemplate(template, -10,-10); 



     canvas.sanityCheck(); 
     canvas.stroke(); 




     document.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (DocumentException e) { 
     e.printStackTrace(); 
    } 

    } 
} 

緑色の四角形が青いほど大きくなければならない:

enter image description here

答えて

0

これは確かに混乱して:iTextの1、2及び5は、有機的成長異なる人々がコードを提供したため、Rectangleオブジェクトの作成方法と、rectangle()メソッドを使用して四角形を定義する方法に違いがあります。

は、APIドキュメントを見てみましょう:

Rectangleコンストラクタは次のようになります。

public Rectangle(float llx, float lly, float urx, float ury) 

あなたは左下と右上の座標を必要とします。

rectangle方法は次のようになります。この場合

public void rectangle(float x, float y, float w, float h) 

、あなただけの左下隅の座標を渡します。他の2つのパラメータは幅と高さです。あなたのコード内

この行が間違っている:

template.rectangle(
    rectangleOnPage.getLeft(), rectangleOnPage.getBottom(), 
    rectangleOnPage.getRight(), rectangleOnPage.getTop()); 

それは次のようになります。

template.rectangle(
    rectangleOnPage.getLeft(), rectangleOnPage.getBottom(), 
    rectangleOnPage.getWidth(), rectangleOnPage.getHeight()); 

この問題は、iTextの7が協調チームによってiTextのを完全に書き直したものですiTextの7に固定されています。 。

+0

ああありがとうございます! – blauerelephant

関連する問題