2016-12-08 49 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的水平相当低。 –