2016-12-08 4 views
0

Я пытаюсь создать PDF-файл с помощью Apache PDFBox, а содержимое - текстовое сообщение из 80 символов в строке. Когда я пытался создать PDF-файл, я заметил, что пространство, _ и другие символы занимают различную ширину линии, и я не мог форматировать их одинаково, как то, что мы делаем в текстовых редакторах. Может ли кто-нибудь помочь мне отформатировать их?Равномерное пространство символов в Apache PDF Box Создание PDF

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDDocumentInformation; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.PDPageContentStream; 
import org.apache.pdfbox.pdmodel.common.PDRectangle; 
import org.apache.pdfbox.pdmodel.font.PDType1Font; 


public class SampleTest { 
    public static void main(String[] args) throws Exception { 
     PDDocument document = new PDDocument();  
     PDPage page = new PDPage(PDRectangle.A4); 
     document.addPage(page);  
     String text = "---------------------------\n" + 
         "------------ABC------------\n" + 
         "A       B\n" + 
         "***************************\n" + 
         "A B C D E F G H I \n" + 
         "---------------------------"; 
     String[] textArray = text.split("\n"); 

     PDPageContentStream contentStream = new PDPageContentStream(document, page);   
     contentStream.beginText();  
     contentStream.setFont(PDType1Font.TIMES_ROMAN, 10); 
     contentStream.setLeading(4f); 
     contentStream.newLineAtOffset(40, 750); 

     for(String line : textArray){ 
      contentStream.showText(line); 
      contentStream.newLine(); 
      contentStream.newLine();  
     } 
     contentStream.endText(); 
     contentStream.close(); 

     document.save("C:\\PDF-Samples\\file.pdf"); 
     document.close(); 
     System.out.println("Done"); 
    } 
} 

ответ

1

Для этого вам необходимо изменить шрифт с фиксированной шириной один (как PDType1Font.html.COURIER).

Некоторые чтения: https://en.wikipedia.org/wiki/Monospaced_font


Для вычисления ширины текста, вы можете использовать:

// result in unit of text space, suitable to use with moveTextPositionByAmount() 
(font.getStringWidth(text)/1000.0f) * (1.0f * fontSize) // font is a PDFont 
+0

Спасибо за помощь! Это сработало. Знаете ли вы, может ли какая-либо структура одинаково размещать содержимое для заполнения строки? – Raja

+0

Я имею в виду масштабирование текстовой строки. – Raja

+2

Нет рамок для этого. Вам нужно использовать математику, т. Е. Получить длину строки, длину строки и рассчитать размер шрифта (или размер пространства между глифами). PDFBox довольно низкий уровень, в отличие от itext. –

Смежные вопросы