我使用了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中的head是新行“\ n”:
直到这里没有任何问题。但我的问题是,当我尝试从生成的PDF文件中选择并复制表格并粘贴到MS-Word时,我得到了不同的结果:table1的头部按垂直顺序复制:
在我的实用代码中,我必须在表头中使用“\ n”,这样表格就无法正确复制粘贴,任何线索?
答案 0 :(得分:0)
在我的实用代码中,我必须使用" \ 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)
现在你的table1被复制并粘贴到Word上了
head1 head2 head3
column 1 column 2 column 3
作为一个真正的Word表。
不幸的是,仍有一些小故障,例如" head"之间的空间这个数字消失了。我不确定应该责怪谁,iText,Adobe Reader或Word。
PS:" head"之间消失空间的故障1月27日在办理登机手续时,iText开发版本7.0.2-SNAPSHOT中的数字已经修复。