2016-02-29 45 views
2

我使用lowagie.text.pdf庫在我的Java應用程序中創建一個PDF文檔,但是我已經意識到它們中有雙倍間距的字符串,即「雙空間」aren'沒有保存。這是.PDF的限制還是我忽略了其他的東西?雙空間不被保存在PDF中

Font font = FontFactory.getFont(FontFactory.HELVETICA, 8); 
float[] columnWidths = new float[columnCount]; 

PdfPCell headerCell = new PdfPCell(new Phrase(gridColumn.getCaption(), font)); 

PdfPTable table = new PdfPTable(columnWidths); 
table.getDefaultCell().setBorderWidth(0.5f); 
table.getDefaultCell().setBorderColor(Color.LIGHT_GRAY); 
table.setHeaderRows(1); 

for (PdfPCell headerCell : headerCells) { 
    table.addCell(headerCell); 
} 

String value = "DOUBLE SPACED"; 

table.addCell(new Phrase(value, font)); 

Document pdfDocument = new Document(PageSize.A4.rotate(), 0, 0, 0, 0); 
ByteArrayOutputStream pdfStream = new ByteArrayOutputStream(); 
PdfWriter.getInstance(pdfDocument, pdfStream); 
pdfDocument.addTitle(caption); 
pdfDocument.open(); 
pdfDocument.add(table); 
pdfDocument.close();' 

謝謝。

+2

1.向我們顯示您的代碼。 2.我需要說'com.lowagie'(2.1.7)已經過時了,你應該使用'com.itextpdf'(5.0.0及以上版本 - 目前5.5.8,5.5.9將在3月份發佈)。 –

+0

請將您的代碼添加到問題中。格式化在評論中混亂。 –

+0

嗨Amedee,我已經稍微重構了它!但是我希望上面的內容能讓你對我想要完成的事情有一個模糊的概念。 – AkinW

回答

2

我已經意識到,在他們雙排間距串即「雙空格」不通過被保存保存

這取決於你的意思。

我伸出你品嚐了一下,打印單,雙和三空間

table.addCell(new Phrase("SINGLE SPACED", new Font(BaseFont.createFont(), 36))); 
table.addCell(new Phrase("DOUBLE SPACED", new Font(BaseFont.createFont(), 36))); 
table.addCell(new Phrase("TRIPLE SPACED", new Font(BaseFont.createFont(), 36))); 

並進一步更新了使用的類當前的iText的5.5.x變種。

如果你看看生成的PDF內部指示,你會看到

(SINGLE SPACED) Tj 
... 
(DOUBLE SPACED) Tj 
... 
(TRIPLE SPACED) Tj 

因此,iText的不字面上保留空間。

的視覺效果:

Screenshot

正如你所看到的差距正在不斷擴張。因此,在PDF的可視化表示中保留了雙重和三重空間!


在另一方面,如果複製和使用Adobe Reader時粘貼,您可以:

SINGLE SPACED 
DOUBLE SPACED 
TRIPLE SPACED 

因此,當前的Adobe閱讀器確實複製&粘貼空格字符,因爲它們是在PDF內部,但將多個合併到一個。

所以:

這是一個.PDF限制

這既不是一個PDF的限制,也不是iText的限制,這是的Adobe Reader怪癖(和一些其他的PDF查看,太)。