2016-12-28 3 views
-1

Я новичок в itext7.
Я видел пример о columndocumentrenderer. код ниже.Наличие трех столбцов в PDF-формате с использованием itext7

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) колонки. как это сделать? пожалуйста, кто-нибудь? или просто вести меня. Спасибо!

+0

Уважаемые даунвитеры, не могли бы вы сказать, почему вы делаете снизу. Благодарю. – Matthias

+0

Я не знаю, почему они проголосовали, а потом снова, я не знаю, почему мой ответ не был принят ... –

ответ

2

Здесь вы определить две колонки:

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 имеет три Rectangle элементов, три колонки будут нарисованы. Не стесняйтесь приспособить значения x, y, width и height в конструкторе Rectangle, если три столбца не имеют нужного размера.

+0

Привет, сэр Бруно, спасибо, что он работает хорошо, теперь моя проблема в том, что этот код ограничено только txt-файлом? ive попробовал использовать pdf, а выход не очень хорош. ты знаешь как? мои документы в формате pdf не в текстовом формате –

+0

Если ваш формат оригинального документа PDF, вам должно быть очевидно, что код, указанный в этом ответе, не работает. Ваш комментарий - совершенно новый вопрос, совершенно не связанный с вашим первоначальным вопросом, поэтому вы должны ** ставить его в качестве нового вопроса. ** Помните, что PDF ** - это не текстовый формат. ** Страница - это страница это страница. Вы не можете ожидать, что содержимое PDF будет вести себя как текст. Весь контент на странице добавляется в абсолютные позиции, не обязательно в том порядке, который вы ожидаете. –