很快,我想使用iText
在特定矩形中绘制文本,可以在PDF编辑器工具中选择。这是我的尝试:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_RESULT));
document.open();
// first
TextField data = new TextField(writer, new Rectangle(30, 60, 200, 200), "1- this text generated by textfiled");
data.setFontSize(10);
data.setTextColor(BaseColor.GRAY);
data.setText("1- this text generated by textfiled");
PdfFormField datafield = data.getTextField();
writer.addAnnotation(datafield);
// second
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
cb.beginText();
cb.moveText(200, 400);
cb.setFontAndSize(BaseFont.createFont(), 14);
cb.showText("2- this text is generated by PdfContentByte ");
cb.endText();
cb.restoreState();
// third
ColumnText ct = new ColumnText(writer.getDirectContent());
writer.setCompressionLevel(0);
ct.setSimpleColumn(100,100,400,300);
ct.setText(new Phrase("3- this text is generated by ColumnText"));
ct.go();
document.close();
我在我的PC上使用Foxit reader
作为PDF工具,在网络上使用Google驱动器文档,Google驱动器可以选择文本,但foxit不能(只是再次测试)。
而here是输出。
以上三种方式都不是我想要的。我想要另一种方法,我可以输入一个矩形(左,上,下,右),文本将适合这个矩形,因为它可以(字体大小是动态的)。是否有任何想法或实例可以达到这个目的?
PdfContentByte
是否为专业人士添加文字,我只是搜索并尝试过。 PdfContentByte
),但它不起作用然后我删除了这些代码,所以现在我必须再次搜索复制并发布到StackOverflow,我认为它类似于我的尝试。现在我再次写测试。答案 0 :(得分:0)
我只看了你的PDF。实质上它包含这个内容
q
BT
200 400 Td
/F1 14 Tf
(2- this text is generated by PdfContentByte ) Tj
ET
Q
BT
1 0 0 1 100 284 Tm
/F1 12 Tf
(3- this text is generated by ColumnText) Tj
ET
此处的字体 F1 定义为
2 0 obj
<</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
endobj
如您所见编码被定义为 WinAnsiEncoding ,我只使用这样的编码从内容流中复制。
因此,只需按照PDF规范第9.10节“文本内容提取”中的文本提取说明进行操作,就可以轻松复制。任何无法复制和粘贴的PDF阅读器似乎都没有尝试过。
对于文本框,它更容易,字段定义为
3 0 obj
<<
/Ff 0
/F 4
/Type/Annot
/BS<</W 1/S/S>>
/Subtype/Widget
/Rect[30 60 200 200]
/FT/Tx
/DR<</Font<</Helv 2 0 R>>>>
/DA(/Helv 10 Tf 0.50196 0.50196 0.50196 rg )
/T(1- this text generated by textfiled)
/V(1- this text generated by textfiled)
/AP<</N 1 0 R>>>>
endobj
如您所见,该值的定义与所需的一样。
关于您的以下问题:
以上三种方式都不是我想要的。我想要另一种方式,我可以输入一个矩形(左,上,下,右),文本将尽可能适合这个矩形(字体大小是动态的)。是否有任何想法或实例可以实现这一目标?
如果结果太大,您将基本上必须使用您尝试的方法,使用不同的字体大小,并限制自己使用至少尝试复制文本的PDF阅读器,如规范所述。不过,我不得不承认,我并不认为Foxit属于不尝试的读者类别。