2

我目前正在开发一个应用程序,其中有一个用户应该使用的表单来键入富文本,以后必须将其转换为 PDF。
我将ckeditor用于文本区域。所以在输入的文本后面有 HTML 代码。然后,我曾经XMLWorker将文本转换为PDF。

但在转换之前,我应该在文本末尾动态包含一个图像,并为此使用<img sr=""/>标签。但是现在的问题是当文本很长时,图像在页面底部被剪切,而不是转到下一页。

我想到了另一种解决方案,即在 PDF 上添加图像,就像使用 itext Image 类一样。
但是当这样做时,我不知道当页面上没有足够的空间用于文本之后的图像时,我不知道要编写哪个代码来动态地将图像放在下一页上。如果有人能帮我解决这个问题,我会很高兴。

这是我当前的代码:

public class PdfMaker {
  public String generatePdf( Theme theme, Cible cible, int i ) {

    String chaine = null;
    String new_chaine = null;

    if ( theme.getCorps() != null ) {
        chaine =
                "<html><head><meta content=\"charset=UTF-8\"/></head><body>" + theme.getCorps()
                        + "<br/><p/><img src=\" " + Constantes.BANNERS_PATH + Constantes.PREF_BANNER + i
                        + Constantes.SUFF_BANNER
                        + " \"/></body></html>";

        // On remplace les patterns contenus dans le texte
        new_chaine = remplacerPatterns( chaine, cible );
    }
    // On génère un nom pour le PDF à créer
    String outfilename = genOutputName();
    try {
        // On crée un objet document
        Document document = new Document();
        // On crée un PDF portant le nom généré dans le chemin défini
        PdfWriter writer = PdfWriter.getInstance( document, new FileOutputStream( Constantes.PDFs_PATH + "\\"
                + outfilename ) );
        document.open();
        // On transpose le texte (en HTML) sur le PDF
        XMLWorkerHelper.getInstance().parseXHtml( writer, document, new StringReader( new_chaine ) );

        System.out.println( "pdf généré" );
        // System.out.println( theme.getCorps().length() );
        document.close();
    } catch ( Exception e ) {
        e.printStackTrace();
    }
    return outfilename;
  }

  private static String genOutputName() {
    return Long.toString( System.currentTimeMillis() ) + ".pdf";
  }

  public String remplacerPatterns( String texte, Cible cible ) {
    String texte1 = null;
    texte1 = texte.replaceAll( "\\{nom\\}", cible.getNom() )
            .replaceAll( "\\{prenom\\}", cible.getPrenom() );
    return texte1;
  }
}

PS:我不是以英语为母语的人,我可能还没有找到合适的词来表达自己。所以如果我写的有什么不清楚的地方,请告诉我。

谢谢

4

0 回答 0