2013-07-16 3 views
0

Я работаю с библиотекой iText, чтобы создавать и обрабатывать документы PDF. давайте у нас есть документ, который содержит простую строку, такую ​​как «Hello world». Итак, в файловой структуре pdf мы должны иметь (Hello world) Tj. Проблема в том, как я могу установить положение для каждого символа на с использованием кода Java (мы также можем поговорить о TJ-операторе). Я обещаю, что человек, что он/она помогает мне и дает мне идеи, я положу его/ее имя в качестве ссылки в моем проекте :)Работа с оператором TJ

любой ответ apreciated :)

С наилучшими пожеланиями,

+0

* Проблема заключается в том, как я могу установить позицию для каждого символа * - что именно ваши требования? В конце концов, если вы просто хотите поместить каждый символ в отдельности, вы можете просто использовать Tj для каждого отдельного графика после установки текстовой матрицы. Или вы спрашиваете, как именно это сделать в iTextSharp и C# или iText и Java? – mkl

ответ

1

проблема заключается в том, как я могу установить позицию для каждого символа с помощью кода 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(); 
} 

Этот пример кода создает это:

letters A, B, C, and D positioned as per the sample code

Как вы также говорили о операторах 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.

+0

, когда вы получите решение нашей проблемы, скажите, пожалуйста, и напишите мне код ПОЖАЛУЙСТА. – Bittar

+0

Как уже упоминалось ранее: если кто-то еще этого не сделал и готов поделиться этим кодом, я считаю, что задача, взятая ** по крайней мере ** несколько недель непрерывной работы, более вероятно, несколько месяцев, особенно, поскольку ваша задача еще не выполнена очень четко определен: вы хотите взять общий PDF-файл и переместить в него символы. Но как именно вы хотите переустановить? Просто измените интервал между символами? Или делать другие манипуляции? И характерный интервал, из которого глиф-последовательности? Все они? Глиф последовательности в каком-то положении? Последовательности, представляющие заданную строку? Уточните ваши требования! – mkl

+0

Я хочу выполнить задачу манипулирования «перепозицией» и изменить интервал между символами – Bittar

0
public static void CreatePdf(String src){ 
    Rectangle rec= new Rectangle(400,400); 
    Document doc= new Document(rec); 
    PdfWriter writer= PdfWriter.getInstance(doc,nweFileOutputStream("doc.pdf")); 
    PdfContentByte content=writer.getDirectContent(); 
    doc.open(); 
    BaseFont bf=BaseFont.createFont(); 
    String texte="hello"; 
    content.setCharacterSpacing((float)2.5); 
    content.setFontAndSize(bf,12); 
    content.beginText(); 
    content.showText(texte); 
    content.endText(); 
    document.close(); 
    } 
    public static void ManipulatePdf(String src, String dest){ 
    PdfReader read= new PdfReader("doc.pdf"); 
    PdfStamper stamper= new PdfStamper(read,new FileOutPutStream("doc_modifie.pdf")); 
    PdfContentByte canvas= stamper.getUnderContent(1); 
    canvas.setFontAndSize(bf,12); 
    canvas.setCharacterSpacing((float)6); 
    canvas.beginText(); 
    canvas.showText(texte); 
    canvas.endText(); 
    stamper.close(); 

    //now how to modify the character spacing to 6 for example and then replace the modified //string instead of the old string in the document 
    } 


} 
0

общественного недействительного ManipulatePdf (String ЦСИ Струнного Dest) { PdfReader read = новый PdfReader ("document.pdf"); PdfStamper stamper = новый PdfStamper (чтение, новый FileOutputStream ("document_modifié.pdf"));

PdfContentByte content= stamper.getUnderContent(1); 

    LocationTextExtractionStrategy lteStrategy = new LocationTextExtractionStrategy(); 
    String texte= PdfTextExtractor.getTextFromPage(read, 1, lteStrategy); 
    pdflayer= new PdfLayer("Overrite", stamper.getWriter()); 
    content.setColorFill(BaseColor.BLACK); 
    content.beginLayer(pdflayer); 
    content.fill(); 
    PdfGState pgState = new PdfGState(); 
    content.setGState(pgState); 
    content.setColorFill(BaseColor.WHITE); 
    content.setCharacterSpacing((float)6); 
    content.beginText(); 
    content.setTextMatrix(15, 385); 
    content.showText("hello"); 
    content.endText(); 
    content.endLayer(); 
    stamper.close(); 
    read.close(); 

}

Смежные вопросы