双精度空间未保存在PDF中

时间:2016-02-29 12:07:45

标签: java pdf pdf-generation

我正在使用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();'

感谢。

1 个答案:

答案 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确实保留了空间。

视觉效果:

Screenshot

正如您所看到的那样,差距在不断扩大。因此,在PDF的可视化表示中保留了双重和三重空间!

另一方面,如果您使用Adobe Reader进行复制和粘贴,则会得到:

SINGLE SPACED
DOUBLE SPACED
TRIPLE SPACED

因此,当前的Adobe Reader 复制并粘贴PDF中的空格字符,但将多个字符折叠为单个字符。

所以:

  

这是.PDF限制

这既不是PDF限制也不是iText限制,它是Adobe Reader(以及其他一些PDF查看器)的怪癖。