我正在使用lowagie.text.pdf库从我的java应用程序中创建PDF文档,但是我已经意识到其中包含双倍间距的字符串,即" DOUBLE SPACE"没有保留。这是.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();'
感谢。
答案 0 :(得分:2)
我已经意识到它们中有双倍间距的字符串,即" DOUBLE SPACE"没有保留
这取决于你保留的意思。
我扩展了你的样本以打印单个,双重和三重空间
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确实保留了空间。
视觉效果:
正如您所看到的那样,差距在不断扩大。因此,在PDF的可视化表示中保留了双重和三重空间!
另一方面,如果您使用Adobe Reader进行复制和粘贴,则会得到:
SINGLE SPACED
DOUBLE SPACED
TRIPLE SPACED
因此,当前的Adobe Reader 不复制并粘贴PDF中的空格字符,但将多个字符折叠为单个字符。
所以:
这是.PDF限制
这既不是PDF限制也不是iText限制,它是Adobe Reader(以及其他一些PDF查看器)的怪癖。