• moxx
  • NEWBIE
  • 0 Points
  • Member since 2011

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 1
    Replies

Visualforceで「renderAs="pdf"」を使用してpdf出力する際、
特定の行数で改ページする方法を検討しています。

検討用のサンプルとして以下のようなVisualforceページを作成したのですが、
出力されたpdfは、改ページはできているものの、
どのページにも最終ページ分のデータが表示されてしまいました。

どのようにすれば、ページごとに適切なデータが表示されるでしょうか?

もしくは、他に適切な改ページ方法がありますでしょうか?


ご教示いただければ幸いに存じます。

 

【Visualforce】

<apex:page standardController="Account" extensions="ExtensionController" showHeader="false" sidebar="false" renderAs="pdf">
  <body style="font-family: Arial Unicode MS;">
    <apex:repeat value="{!printRecords}" var="items" id="thePage">
      <apex:repeat value="{!items}" var="item" id="theTable">
        <apex:outputtext value="{!item.Name}"/>
        <br />
      </apex:repeat>
      <div style="page-break-after: always;"/>
    </apex:repeat>
  </body>
</apex:page>

 

【コントローラ】

public class ExtensionController {

    private final Account AccountObj;
    private static Integer pageSize = 5;

    public List<Contact[]> printRecords {get; private set;}

    public ExtensionController(ApexPages.StandardController controller) {
        this.AccountObj = (Account)controller.getRecord();
        BindData();
    }

    private void BindData(){
        String nowId = AccountObj.Id;
        Contact[] Contacts = 
            [SELECT id, Name
               FROM Contact 
              WHERE AccountId = :nowId 
              ORDER BY Name];

        printRecords = new List<Contact[]>();

        Contact[] pageContacts = new Contact[]{};
        Integer counter = 0;
         
        for(Contact c : Contacts){
            if (counter <= pageSize){
                pageContacts.add(c);
                counter++;
            }
            if (counter == pageSize){
                counter = 0;
                printRecords.add(pageContacts);
                pageContacts.clear();
            }
        }
        if(!pageContacts.isEmpty()){
            printRecords.add(pageContacts);
        }
    }
}

 



 

  • April 12, 2011
  • Like
  • 0

Visualforceで「renderAs="pdf"」を使用してpdf出力する際、
特定の行数で改ページする方法を検討しています。

検討用のサンプルとして以下のようなVisualforceページを作成したのですが、
出力されたpdfは、改ページはできているものの、
どのページにも最終ページ分のデータが表示されてしまいました。

どのようにすれば、ページごとに適切なデータが表示されるでしょうか?

もしくは、他に適切な改ページ方法がありますでしょうか?


ご教示いただければ幸いに存じます。

 

【Visualforce】

<apex:page standardController="Account" extensions="ExtensionController" showHeader="false" sidebar="false" renderAs="pdf">
  <body style="font-family: Arial Unicode MS;">
    <apex:repeat value="{!printRecords}" var="items" id="thePage">
      <apex:repeat value="{!items}" var="item" id="theTable">
        <apex:outputtext value="{!item.Name}"/>
        <br />
      </apex:repeat>
      <div style="page-break-after: always;"/>
    </apex:repeat>
  </body>
</apex:page>

 

【コントローラ】

public class ExtensionController {

    private final Account AccountObj;
    private static Integer pageSize = 5;

    public List<Contact[]> printRecords {get; private set;}

    public ExtensionController(ApexPages.StandardController controller) {
        this.AccountObj = (Account)controller.getRecord();
        BindData();
    }

    private void BindData(){
        String nowId = AccountObj.Id;
        Contact[] Contacts = 
            [SELECT id, Name
               FROM Contact 
              WHERE AccountId = :nowId 
              ORDER BY Name];

        printRecords = new List<Contact[]>();

        Contact[] pageContacts = new Contact[]{};
        Integer counter = 0;
         
        for(Contact c : Contacts){
            if (counter <= pageSize){
                pageContacts.add(c);
                counter++;
            }
            if (counter == pageSize){
                counter = 0;
                printRecords.add(pageContacts);
                pageContacts.clear();
            }
        }
        if(!pageContacts.isEmpty()){
            printRecords.add(pageContacts);
        }
    }
}

 



 

  • April 12, 2011
  • Like
  • 0