diff --git a/src/main/java/neatlogic/framework/util/ChineseFont.java b/src/main/java/neatlogic/framework/util/ChineseFont.java
index b0c5b406b1ce6114ef28eb2efb71046822c55481..ae4a6ac6ccb4d862d83640606209a3ae8709d8ca 100644
--- a/src/main/java/neatlogic/framework/util/ChineseFont.java
+++ b/src/main/java/neatlogic/framework/util/ChineseFont.java
@@ -33,8 +33,11 @@ public enum ChineseFont {
private final String fontFileName;
private final String fontName;
+ public String getPath() {
+ return "/neatlogic/resources/fonts/" + this.fontFileName;
+ }
public URL getFontUrl() {
- return this.getClass().getResource("/neatlogic/resources/fonts/" + this.fontFileName);
+ return this.getClass().getResource(getPath());
}
public String getFontName() {
diff --git a/src/main/java/neatlogic/framework/util/ExportUtil.java b/src/main/java/neatlogic/framework/util/ExportUtil.java
index 0419d4f8f05df57419b13b158f91003e1b2d32c5..c96d988f04a53af84dbef1f01301a4e3ecdc8aa8 100644
--- a/src/main/java/neatlogic/framework/util/ExportUtil.java
+++ b/src/main/java/neatlogic/framework/util/ExportUtil.java
@@ -1,9 +1,7 @@
package neatlogic.framework.util;
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.PageSize;
-import com.itextpdf.text.pdf.PdfWriter;
-import com.itextpdf.tool.xml.XMLWorkerHelper;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.pdf.BaseFont;
import org.apache.commons.lang3.StringUtils;
import org.docx4j.Docx4J;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
@@ -21,11 +19,11 @@ import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Entities;
import org.w3c.tidy.Tidy;
+import org.xhtmlrenderer.pdf.ITextRenderer;
import javax.xml.bind.JAXBElement;
import java.io.*;
import java.math.BigInteger;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -367,14 +365,14 @@ public class ExportUtil {
* @throws DocumentException
*/
public static void savePdf(String content, OutputStream os, boolean landscape) throws IOException, DocumentException {
- com.itextpdf.text.Document doc = new com.itextpdf.text.Document(landscape ? PageSize.A4 : PageSize.A4.rotate());
- PdfWriter writer = PdfWriter.getInstance(doc, os);
- doc.open();
- ByteArrayInputStream bis = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
- XMLWorkerHelper.getInstance().parseXHtml(writer, doc, bis, StandardCharsets.UTF_8);
- bis.close();
- doc.close();
- writer.close();
+ ITextRenderer renderer = new ITextRenderer();
+ ChineseFont[] fonts = ChineseFont.values();
+ for (ChineseFont font : fonts) {
+ renderer.getFontResolver().addFont(font.getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+ }
+ renderer.setDocumentFromString(content);
+ renderer.layout();
+ renderer.createPDF(os);
}
}
diff --git a/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java b/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
index f975d8f5015a9a88222b0584fb494c35d28d68b0..b6f46bd58bb946180dae5e8e285832c218b06df6 100644
--- a/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
+++ b/src/main/java/neatlogic/framework/util/pdf/AddPageNumberEvent.java
@@ -15,12 +15,12 @@ along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Document;
-import com.itextpdf.text.Element;
-import com.itextpdf.text.Phrase;
-import com.itextpdf.text.pdf.ColumnText;
-import com.itextpdf.text.pdf.PdfPageEventHelper;
-import com.itextpdf.text.pdf.PdfWriter;
+import com.lowagie.text.Document;
+import com.lowagie.text.Element;
+import com.lowagie.text.Phrase;
+import com.lowagie.text.pdf.ColumnText;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
/**
* 添加页码事件
diff --git a/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java b/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
index 517e407a56182e36d7a26b19a1b97aa16527a046..8532c52f6da0fb919b657670e8bc9efd8d8a02b7 100644
--- a/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
+++ b/src/main/java/neatlogic/framework/util/pdf/CharterInfoEvent.java
@@ -15,11 +15,12 @@ along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Chunk;
-import com.itextpdf.text.Document;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.PdfPageEventHelper;
-import com.itextpdf.text.pdf.PdfWriter;
+import com.lowagie.text.Chunk;
+import com.lowagie.text.Document;
+import com.lowagie.text.Element;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
@@ -39,18 +40,20 @@ public class CharterInfoEvent extends PdfPageEventHelper {
@Override
public void onChapter (PdfWriter writer, Document document, float paragraphPosition, Paragraph title) {
- List chunks = title.getChunks();
+ List chunks = title.getChunks();
if (CollectionUtils.isNotEmpty(chunks)) {
- for (Chunk chunk : chunks) {
- Map attributes = chunk.getAttributes();
- if (MapUtils.isEmpty(attributes)) {
- continue;
+ for (Element element : chunks) {
+ if (element instanceof Chunk chunk) {
+ Map attributes = chunk.getChunkAttributes();
+ if (MapUtils.isEmpty(attributes)) {
+ continue;
+ }
+ String localDestination = (String) attributes.get(Chunk.LOCALDESTINATION);
+ if (localDestination == null) {
+ continue;
+ }
+ localDestinationMap.put(title.getContent(), localDestination);
}
- String localDestination = (String) attributes.get(Chunk.LOCALDESTINATION);
- if (localDestination == null) {
- continue;
- }
- localDestinationMap.put(title.getContent(), localDestination);
break;
}
}
@@ -70,7 +73,7 @@ public class CharterInfoEvent extends PdfPageEventHelper {
public String getLocalDestination(String key) {
return localDestinationMap.get(key);
}
-
+
public Integer getDepth(String key) {
return depthMap.get(key);
}
diff --git a/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java b/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
index b6df38f5baf9cf68a0d9b1231ac9b4e87147c2f2..929cc5cb1d984b19a684b292364fa3deff33c6b3 100644
--- a/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/PDFBuilder.java
@@ -14,8 +14,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.*;
-import com.itextpdf.text.pdf.PdfPTable;
+import com.lowagie.text.*;
+import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.PageSize;
import java.io.IOException;
diff --git a/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java b/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
index 8dd8c5e8565365848f90f4d8b0326e492abd2a4b..267b331736e7f18706ee36a5984efc33b4f6ac0a 100644
--- a/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/ParagraphBuilder.java
@@ -14,10 +14,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.Font;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.BaseFont;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.Font;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.BaseFont;
import java.io.IOException;
diff --git a/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java b/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
index c19f70132e128a3c3ca283d0b67af67cc5572cd6..01f24a74c3f72245e7990139a4a7767cc63421ac 100644
--- a/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
+++ b/src/main/java/neatlogic/framework/util/pdf/TableBuilder.java
@@ -14,9 +14,9 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .*/
package neatlogic.framework.util.pdf;
-import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.PdfPCell;
-import com.itextpdf.text.pdf.PdfPTable;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
/**
* @author longrf