程序必须将现有的 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 中以这种方式更改关键字的颜色,那就太好了。
要为使用 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 方法以根据需要添加或删除关键字。