首页 > 解决方案 > iText 使用 PDF 模板错误地格式化段落数据

问题描述

我创建了一个 PDF 模板,将传递的字符串数据字段格式化为包含 itext 代码的 java 函数(如下)。传递的字符串之一(例如 F13)将用于模板中包含的段落。我认为因为是模板中的文本字段,所以段落没有被正确包装。请参阅此示例并突出显示结果>>>

使用模板和字符串创建的 PDF 文档,其中段落应为:

使用模板和字符串创建的 PDF 文档应该是段落。

该段落应改为如下所示:“结果如下所示,它显示文本已写入文档但看起来一团糟。当长度超过可用宽度时,块不知道如何强制换行在文档中。真的,它们应该用于更改或设置内联单词或短语的样式。

public class ABC_PDF_CreateAndFill4 {

public static final String SRC = 
  "C:\\Users\\XXX\\Documents\\iTextPDF\\Template\\PDFtest_062320_v3.pdf";
  public static final String DEST = // 
 "C:\\Users\\XXXX\\Documents\\iTextPDF\\PDFtest_11.pdf";
 .
 .
 .
// manipulatePDF called from external routine passing parms.   

public void manipulatePdf(String S1, String D1, String F1, String F2, 
String F3, String F4, String F5, String F6, String F7, String F8, String 
F9, String F10, String F11, String F12, String F13, String F14, String 
F15, String F16, String F17, String F18, String F19, String F20, String 
F21  ) 
               throws IOException, DocumentException {
               PdfStamper stamper;
               int i = 0;
                       
               PdfReader reader = new PdfReader(S1);           
               AcroFields form = reader.getAcroFields();       
               AcroFields fields = reader.getAcroFields();
       
               stamper = new PdfStamper(reader, new FileOutputStream(D1));
                          
               fill(stamper.getAcroFields(), F1, F2, F3, F4, F5, F6, F7, 
      F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21 );
      
               stamper.setFormFlattening(true);
               stamper.close();
       }
         
       
        public static void fill( AcroFields form, String F1, String F2, 
        String F3, String F4, String F5, String F6, String F7, String F8, 
        String F9, String F10, String F11, String F12, String F13, String 
        F14, String F15, String F16, String F17, String F18, String F19, 
        String F20, String F21  )
             throws IOException, DocumentException {         
                    
           
             form.setField("F02_RO_Address_Line1", F1); // 1
             form.setField("F03_RO_Address_Line2", F2); // 2
             form.setField("F22_Addressee", F3); // 3
             form.setField("F23_Adress_Line1", F4); // 4
             form.setField("F24_Address_Line2", F5); // 5
             form.setField("F25_Address_Line3", F6); // 6
             form.setField("F26_Address_Line4", F7); // 7
             form.setField("F01_Notice_Date", F8); // 8
             form.setField("F04_Company_Name_Line1", F9); // 9
             form.setField("F05_Company_Name_Line2", F10); // 10
             form.setField("F08_RO_Postal_Address_Line1", F11); // 11
             form.setField("F09_RO_Postal_Address_Line2", F12); // 12
             form.setField("RTField", F13);  // Text field paragraph
             form.setField("F111_Emc2_Indicator", F14); // 14
             form.setField("F238_Enclosure", F15); // 15
             form.setField("Enclosure", F16); // 16
             form.setField("F11_Agents_Name_Copy", F17); // 17
             form.setField("F12_Agent_Phone", F18); // 18
             form.setField("F06_Requester_ID", F19); // 19;
             form.setField("ShortForm", F20); // 20;
             form.setField("Display_Agent_Code", F21); // 21;        
            

这篇文章接近我可能需要做的事情。 如何使用 iText 格式化 pdf 模板中的文本

标签: javatemplatesformattingitext

解决方案


推荐阅读