我使用了itext7,用于创建表的代码非常简单:
float[] tableWidth = {75, 75, 75};
Table table1 = new Table(tableWidth);
table1.addHeaderCell("head \n1");
table1.addHeaderCell("head \n2");
table1.addHeaderCell("head \n3");
table1.addCell("column 1");
table1.addCell("column 2");
table1.addCell("column 3");
Table table2 = new Table(tableWidth);
table2.addHeaderCell("head 1");
table2.addHeaderCell("head 2");
table2.addHeaderCell("head 3");
table2.addCell("column 1");
table2.addCell("column 2");
table2.addCell("column 3");
document.add(table1);
document.add(new Paragraph("\n"));
document.add(table2);
我创建了两个表,唯一的区别是:table1中的头是换行“ \ n”:
到这里为止没有任何问题。但是我的问题是,当我尝试从生成的PDF文件中选择表格并将其复制并粘贴到MS-Word时,我得到了不同的结果:table1的头以垂直顺序复制:
就像在我的实际代码中一样,我必须在表头中使用“ \ n”,因此无法正确复制粘贴该表,有什么线索吗?
就像在我的实际代码中一样,我必须在表头中使用“ \ n”,因此无法正确复制粘贴该表,有什么线索吗?
您认为通常可以按照尊重表结构的方式从PDF复制和粘贴表内容的假设是错误的。
在PDF中,绘制表1的说明为:
因此,不再有立即显示存在表的指示。因此,一种简单的文本提取机制可以在绘制字符串时继续提取字符串,每当y坐标发生变化时都插入换行符,而不用区分是向上还是向下。结果就是您所观察到的。
不过,PDF可以选择用HTML'ish指示符标记绘图指令。使用iText 7,您可以在PdfDocument
实例中激活标记机制:
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
pdfDocument.setTagged();
Document document = new Document(pdfDocument);
...
(摘自TablesToCopyAndPasteFrom.java)
现在,您的表1像这样复制并粘贴到Word
head1 head2 head3
column 1 column 2 column 3
作为实际的Word表。
不幸的是,仍然存在一些小故障,例如“头部”和数字之间的间隔消失了。我不确定应该归咎于谁,iText,Adobe Reader或Word。
PS: 1月27日,在签入的iText开发版本7.0.2-SNAPSHOT中似乎修复了“头”和数字之间消失的小故障。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句