проблема заключается в том, как я могу установить позицию для каждого символа с помощью кода Java
Использование IText вы можете легко поместить любые фрагменты текста (в том числе отдельных символов), используя текст позиционирования и showin г методы PdfContentByte.
Если вы хотите, чтобы обернуть эту функциональность, вы можете использовать вспомогательный класс вроде этого:
public class ContentWriter
{
public ContentWriter(PdfContentByte content) throws DocumentException, IOException
{
this.content = content;
BaseFont bf = BaseFont.createFont();
content.beginText();
content.setFontAndSize(bf, 12);
}
// x and y are offsets relative to the start coordinates of the most recent write call
public ContentWriter write(float x, float y, String text)
{
if (finished)
throw new IllegalStateException("ContentWritr session already finished.");
content.moveText(x, y);
content.showText(text);
return this;
}
public void finish()
{
if (!finished)
{
content.endText();
finished = true;
}
}
final PdfContentByte content;
boolean finished = false;
}
Он может быть использован, как это:
public void testShowSomePositionedContent() throws DocumentException, IOException
{
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("positionedContent.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
new ContentWriter(cb).
write(100, 400, "A").
write(20, 0, "B").
write(18, 2, "C").
write(10, 7, "D").
finish();
document.close();
}
Этот пример кода создает это:
Как вы также говорили о операторах PDF, вам может быть интересно, как это выглядит в самом PDF-файле:
BT
/F1 12 Tf
100 400 Td
(A)Tj
20 0 Td
(B)Tj
18 2 Td
(C)Tj
10 7 Td
(D)Tj
ET
Как класс ContentWriter
помощника требует только PdfContentByte
экземпляра, он также может быть использован с UnderContent или OverContent некоторой страницы в PdfStamper.
* Проблема заключается в том, как я могу установить позицию для каждого символа * - что именно ваши требования? В конце концов, если вы просто хотите поместить каждый символ в отдельности, вы можете просто использовать Tj для каждого отдельного графика после установки текстовой матрицы. Или вы спрашиваете, как именно это сделать в iTextSharp и C# или iText и Java? – mkl