为 itext 中的某些关键字着色

问题描述 投票:0回答:1

程序必须将现有的 Java 文件 (.java) 转换为 PDF。但是在 PDF 内部,某些关键字必须像在 Netbeans(我正在使用的)中那样着色(int、double、new、...)。所以直到现在,我将 java 文件转换为一个字符串,并用 ANSI 颜色为字符串中的关键字着色。但是当转换到 PDF 时,我无法保持关键字的颜色。

这是我对字符串中关键字的标记/着色:

public static String markKeywords(String doc, String keywords){

    String[] keywordsarr = keywords.split(",");
    
    for(int i = 0; i<keywordsarr.length;i++){
        String old = " " + keywordsarr[i] + "" ;
        String neu = " \u001B[34m" + keywordsarr[i] + "\u001B[0m";
        doc = doc.replace(old,neu);
    }
    return doc;
}

在这里过渡到 pdf:

public static void createPDF(String doc,String loc){
    try{
        //Font font = new Font(FontFamily.COURIER, 13, Font.NORMAL, BaseColor.BLACK);
        //Create Font with Encoding
        BaseFont fontstd = BaseFont.createFont("C:\\Windows\\Fonts\\cour.ttf", BaseFont.WINANSI,
        BaseFont.EMBEDDED);
        Font font_std = new Font(fontstd, 13);
        
        //Saving pdf file in the same folder
        String targetloc = loc.replace(".java", ".pdf"); 
        
        //creating pdf
        Document document = new Document();            
        PdfWriter.getInstance(document, new FileOutputStream(targetloc));
        
        document.open();
        Paragraph p = new Paragraph();
        
        p.add(new Chunk(doc, font_std));
        document.add(p);
        document.close();
        
    }catch(Exception e){
        e.printStackTrace();
    }
}

我必须转换成 PDF 的脚本非常基础,仅由一个主要方法和一些其他方法组成。我也没有在 itext 中找到像

String.replace()
" 这样的东西,如果我可以在 itext 中以这种方式更改关键字的颜色,那就太好了。

java pdf itext
1个回答
0
投票

要为使用 iText 生成的 PDF 中的特定关键字着色,您可以使用 Chunk 对象并设置它们的字体和背景颜色。下面是一个示例,说明如何修改 createPDF 方法来为 Java 代码中的关键字着色:

public static void createPDF(String doc, String loc) {
try {
    // Font for regular text
    BaseFont fontStd = BaseFont.createFont("C:\\Windows\\Fonts\\cour.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED);
    Font fontRegular = new Font(fontStd, 13);

    // Font for keyword text
    Font fontKeyword = new Font(fontStd, 13, Font.BOLD, new BaseColor(0, 0, 255)); // blue color

    // Saving pdf file in the same folder
    String targetloc = loc.replace(".java", ".pdf");

    // creating pdf
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(targetloc));

    document.open();

    // Split the document into words
    String[] words = doc.split("\\s+");

    // Add each word to the document as a chunk with the appropriate font
    for (String word : words) {
        if (isKeyword(word)) {
            Chunk chunk = new Chunk(word, fontKeyword);
            document.add(chunk);
        } else {
            Chunk chunk = new Chunk(word, fontRegular);
            document.add(chunk);
        }
        document.add(new Chunk(" "));
    }

    document.close();

} catch (Exception e) {
    e.printStackTrace();
}

}

 private static boolean isKeyword(String word) {
        String[] keywords = {"int", "double", "new"}; // add more keywords as needed
        for (String keyword : keywords) {
            if (keyword.equals(word)) {
                return true;
            }
        }
        return false;
    }

此代码使用两个 Font 对象:一个用于常规文本,一个用于关键字文本。将每个词添加到文档时,它会使用 isKeyword 方法检查该词是否是关键字,并将其添加为具有适当字体的块。可以修改 isKeyword 方法以根据需要添加或删除关键字。

© www.soinside.com 2019 - 2024. All rights reserved.