2016-12-08 77 views
0

我正在嘗試使用Apache PDFBox創建PDF文件,並且內容是每行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

沒有框架。您需要使用數學方法,即獲取字符串長度,行長度以及計算字體大小(或字形間的空間大小)。與itext不同,PDFBox的水平相當低。 –