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