開発プラットフォームとしてのeclispseの使用
参照されたjarパッケージ:
最初:
プロジェクトJSPでダウンロードを開始する方法
/ *
* PDFブラウジングページを生成
* /
function downLoadToPDF(taskId){
var rootpath = BaseContext + "/ DemoController / download?TaskId =" + taskId; //アクセスパス
window.open(rootpath、 "_blank"); //新規インターフェース
}
次に、このDemoControllerを入力します
/ * PDFを生成するためのバックグラウンドコード
* /
パブリッククラスTestPDFUtil {
public static void main(String [] args){
String templateName = "template"; //使用するテンプレートの名前
String targetPathRoot = "D:/ temp /"; //生成されたPDF
マップ<String、Object>マップのターゲットの場所= generateUnitOpenAccountApplicationData(); //独自のニーズに応じてテンプレートを構築するために必要なデータ
try {
String path = PDFUtil.getPath(); //最初にプロジェクトパスを取得メソッド
PDFUtil.generateToFile(path、 ".. をツールクラスで呼び出す..... / "+ templateName +" .ftl "、path +" / images / "、map、targetPathRoot + templateName +" .pdf "); // Path ==》プロジェクトのテンプレートファイル
システムによると、out.println( "Successful PDF generation!");
} catch(Exception e){
e.printStackTrace();
System.out.println( "Failed to generate PDF!");
}
}
次に、補助ツールが付属します。
パッケージutil.PDFUtil;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.Locale;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;
@SuppressWarnings( "all")
パブリッククラスPDFUtil {プライベート静的最終ロガーロガー= LoggerFactory.getLogger(PDFUtil.class);
public static void generateToFile(String ftlPath、String fileName、String imageDisPath、Object data、String outputFile)throws Exception {
OutputStream out = null;
ITextRenderer render = null;
試す{
文字列html = getPdfContent(ftlPath、ftlName、data);
out = new FileOutputStream(outputFile);
render = getRender();
render.setDocumentFromString(html);
if(imageDiskPath!= null &&!imageDispath.equals( "")){
// htmlに画像がある場合、画像のパスはプロジェクトの絶対パスを使用します。これはルートパスとして使用されます
render.getSharedContext()。setBaseURL( "file:/" + iamgeDisPath);
}
render.layerout();
render.createPDF();
render.finishPDF();
render = null;
戻る;
} catch(Exception e){
logger.error( "Exception:"、e);
eをスローします。}最終的に{
if(out!= null){
try {
out.close();
} catch(IOException e){
logger.error( "Exception:"、e);
eをスローします。
}
}
}}
// PDFコンテンツを取得します
public static String getPdfContent(String ftlPath、String ftlName、Object o)throws Exception {
return userTemplate(ftlPath、ftlName、o);
}
// freeMakeを使用してHTMLコンテンツを取得します
public static String useTemplate(String ftlPath、String ftlName、Object o)throws Exception {
文字列html = null;
テンプレートtpl = getFreemakerConfig(ftlPath).getTemplate(ftlName);
tpl.setEcncoding( "UTF-8");
StringWriter writer = newStringWriter();
tpl.process(o、writer);
writer.flush();
html = writer.toString();
htmlを返します。
}
//フリーマーカーの設定を取得します
プライベート静的構成getFreemarkerConfig(String templatePath)throws IOException {
構成config = new Configuration();
config.setDirectoryForTemplateLoading(new File(templatePath));
config.setEncoding(Locale.CHINA、 "utf-8");
構成を返す;
}
public static ITextRenderer getRender()throws()DocumentException、IOException {
ITextRenderer render = new ITextRender();
文字列パス= getPath();
//中国語フォントファイルパスをサポートするフォントを追加して、適切なフォントを検索します
render.getFontResolver()。addFont(path + "../ fonts / ARIALUNI.TTF"、BaseFont、IDENTITY_H、BaseFont.NOT_EMBEDDED);
render.getFontResolver()。addFont(path + "../ fonts / SIMSUNB.TTF"、BaseFont、IDENTITY_H、BaseFont.NOT_EMBEDDED);
レンダリングを返す;
}
//プロジェクトのルートパスを取得します
public static String getPath(){
// PDFUtil.class.getResource( "").getPath().substring(1)を返します://クラスパス(現在のクラスがあるパス)を返します
// PDFUtil.class.getResource( "/")を返します。getPath()。substring(1); //ルートパスを返します(コンパイル後のルートパス)
PDFUtil.class.getClassLoader()。getResource( "")。getPath();を返します。
}
}
ツールクラスで必要なメソッドについては、パスの問題を明確に確認する必要があります。そうしないと、データにアクセスできなくなるため、デバッグ時にブレークポイントを調整して、自分のパスと一致するプロジェクトパスを見つける必要があります。
次にデータを保存し、マップコレクションを使用して保存します
/ **
*ページに必要なさまざまなパラメータを追加
* @param患者
* @paramタスク
* @param mettTask
* @paramリクエスト
* @return
* /
プライベートマップgenerateUnitOpenAccountApplicationData(患者、
タスクタスク、リスト<MettTask> mettTask、リスト<ScaleTask> scaleTask、
HttpServletRequest request、List <CemtTask> cemtTask){
Map <String、Object> total_map = new HashMap <String、Object>(); //データ全体を格納
Map <String、Object> map = new HashMap <String 、Object>(); //全体的なデータ
マップを保存する= Word_stage_Util.createModel(patient、task); //データを取得して統合するこれは、保存するデータを選択し、データベースを読み書きすること
です。 map); //トータル
リターンtotal_map;
}
ダウンロードテンプレートのHTMLインターフェイス表示
FTL内部プレビュー:
フォント要件:
***このテクノロジーはLHFでサポートされています。jarパッケージとフォントは後でアップロードされます