DF(Portable Document Format)是一種通用的文檔格式,可以保持文檔的原貌,因此在傳輸、打印和分享文檔時,它是非常方便的。它可以將文檔從其他格式轉換成PDF格式,以便在任何設備上,在任何位置,可以以相同的格式查看文檔。 比如客匯寶APP上可以用來轉換各類文檔。其他格式轉換成PDF格式的功能應用可以滿足以下需求:
1. 將文檔從其他格式轉換成PDF格式,以便可以在任何設備上,以相同的格式查看文檔。
2. 將圖片、文本文檔、表格文檔、電子表格文檔、電子郵件文檔、PPT等轉換成PDF格式,以便打印、分享和傳輸。
3. 自動檢測文檔內容,將內容轉換成PDF格式,以便保持文檔原貌。
4. 支持多種格式的文檔轉換,包括Microsoft Word,Excel,Powerpoint文檔,OpenOffice文檔,Adobe Illustrator文檔,JPG,PNG,GIF,HTML,RTF等等。
5. 支持批量轉換,可以一次性將多個文檔轉換成PDF格式,以節省時間。
6. 支持多種語言的文檔轉換,可以將文檔從英語、法語、德語、西班牙語、日語、韓語、俄語、阿拉伯語等轉換成PDF格式。
7. 支持跨平臺的文檔轉換,可以將文檔從Windows,Mac,Linux,iOS,Android等轉換成PDF格式。
8. 可以設置文檔的屬性,如標題、作者、關鍵字等。
9. 可以設置PDF文檔的安全性,可以設置編輯、打印、復制、外部訪問等權限。 10. 可以將PDF文檔轉換成其他格式,如Word,Excel,Powerpoint,HTML,RTF等等。
其他格式轉換成PDF格式的功能應用可以節省大量的時間和精力,為用戶提供更多的便利。它可以讓用戶在任何設備上,以相同的格式查看文檔,而不必擔心文檔的格式丟失。它還可以讓用戶有更多的選擇,可以將任何格式的文檔轉換成PDF格式,并可以設置文檔的安全性。
總之,其他格式轉換成PDF格式的功能應用是一種非常有用的工具,可以極大地提高文檔的傳輸效率和安全性。
譯自: https://opensource.com/article/18/5/markdown-slide-generators
作者: Scott Nesbitt
譯者: Andy Song
這些簡單的幻燈片創建工具可以無縫地使用 Markdown,可以讓你的演示添加魅力。
假設你需要做一個 演示(presentation)。在準備的過程中,你想到“我需要寫幾張幻燈片”。
你可能傾向于簡潔的 純文本 ,認為 LibreOffice Writer 這樣的軟件對你要做的事情而言像是殺雞用牛刀。或者你只是遵從你內心深處的極客意識。
將 Markdown 格式的文件轉換為優雅的演示幻燈片并不困難。下面介紹可以完成這項工作的四種工具。
在這些工具中, Landslide 具有更高的靈活性。它是一個命令行工具,可以將 Markdown、 reStructuredText 或 Textile 格式的文件轉換為基于 Google HTML5 幻燈片模板 的 HTML 文件。
你要做的不過是編寫 Markdown 格式的幻燈片源文件,打開一個終端窗口并運行 landslide 命令即可,其中命令參數為 Markdown 文件的文件名。Landslide 會生成 presentation.html,可以在任何 Web 瀏覽器中打開。簡單吧?
但不要被簡易的操作誤導你。Landslide 提供了不少有用的特性,例如增加注記以及為幻燈片增加配置文件。為何要使用這些特性呢?按照 Landslide 開發者的說法,這樣可以匯聚不同演示中的源文件目錄并重用。
在 Landslide 演示中查看演示者注記
Marp 仍處于開發中,但值得期待。它是 “Markdown Presentation Writer” 的簡寫。Marp 是一個基于 Electron 的工具,讓你在一個簡單的雙欄編輯器中編寫幻燈片:在左欄編寫 Markdown,在右欄中預覽效果。
Marp 支持 GitHub 風格 Markdown 。如果你需要一個使用 GitHub 風格 Markdown 編寫幻燈片的快速教程,可以參考 示例項目 。GitHub 風格 Markdown 比基礎 Markdown 更加靈活。
Marp 只自帶兩個基礎主題,但你可以為幻燈片增加背景圖片、調整圖片大小以及增加數學表達式。不足之處,目前只支持 PDF 格式導出。老實說,我很好奇為何不一開始就提供 HTML 格式導出。
使用 Marp 編輯簡單的幻燈片
你可能已經知道 pandoc 是一種支持多種 標記語言(markup languages)相互轉換的神奇工具。但你可能不知道,pandoc 可以將 Markdown 格式文件轉換為 Slidy 、 Slideous 、 DZSlides 和 Reveal.js 等演示框架支持的優雅 HTML 幻燈片。如果你使用 LaTeX ,可以使用 Beamer 軟件包 輸出 PDF 格式的幻燈片。
你需要在幻燈片中 使用特定格式 ,但可以通過 變量 控制其效果。你也可以更改幻燈片的外觀與風格,增加幻燈片之間的暫停,添加演示者注記等。
當然,你需要在你的主機上安裝你喜歡的演示框架,因為 Pandoc 只生成原始幻燈片文件。
查看使用 Pandoc 和 DZSlides 創建的幻燈片
Hacker Slides 是一個 Sandstorm 和 Sandstorm Oasis 平臺上的應用,基于 Markdown 和 Reveal.js 幻燈片框架。生成的幻燈片可以比較樸素,也可以很炫。
在瀏覽器的兩欄界面中編寫幻燈片,左欄輸入 Markdown 文本,右欄渲染效果。當你制作完成后,可以在 Sandstorm 中演示,也可以生成分享鏈接讓其它人演示。
你可能會說,你不使用 Sandstorm 或 Sandstorm Oasis 怎么辦?不要擔心,Hacker Slides 提供了可以在桌面或服務器上運行的 版本 。
在 Hacker Slides 中編輯幻燈片
如果你使用 Jupyter 筆記本(Notebooks) (參考社區版主 Don Watkins 的 文章 )發布數據或指令文本,你可以使用 Jupyter2slides 。該工具基于 Reveal.js,可以將筆記本轉換為一系列精美的 HTML 幻燈片。
如果你傾向于托管應用,試試 GitPitch ,支持 GitHub、GitLab 和 Bitbucket。只需在將幻燈片源文件推送到支持的代碼倉庫中,在 GitPitch 中指向該倉庫,這樣你就可以在 GitPitch 網站上看到你的幻燈片了。
你有最喜歡的基于 Markdown 的幻燈片生成器嗎?留下評論分享吧。
via: https://opensource.com/article/18/5/markdown-slide-generators
作者: Scott Nesbitt 選題: lujun9972 譯者: pinewall 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
持原創,共同進步!請關注我,后續分享更精彩!
項目中經常有生成圖表報告的需求。實現的方式有很多,下面幾種方案,各有優缺點。
純java后端實現:后端JFreeChart等繪制庫畫好圖表,再通過itext庫導出為pdf。該方案能實現簡單的圖表功能,樣式、格式調整等可能會花大量時間。適合中小型報表開發項目。
前端繪制圖表,后端運行時命令調用wkhtmltopdf生成pdf:后端通過運行時命令調用node js,js使用wkhtmltopdf庫動態訪問報表url地址,HTML內容渲染完成后生成pdf文件。該方案,使用純前端js繪制圖表,能實現復雜需求。但wkhtmltopdf庫對不同瀏覽器的js存在兼容性問題,導出成pdf文件時存在各種坑,在單頁面技術支持還不太成熟。適合豐富報表的pdf導出,但兼容性問題維護成本太高。
前端繪制圖表,后端運行時命令調用puppeteer生成pdf:后端通過運行時命令調用node js,js使用puppeteer庫動態訪問報表url地址,HTML內容渲染完成后生成pdf文件。該方案和wkhtmltopdf方案類似,但兼容性更好。puppeteer是 Chrome 開發團隊在 2017 年發布的一個 Node.js 包,用來模擬 Chrome 瀏覽器的運行。可以在無界面的環境中運行Chrome或通過命令行、程序語言操作 Chrome。理論上Chrome中顯示的圖表,就能通過該庫生成一致的pdf文件內容,不用浪費很多時間在頁面樣式和兼容性問題上。
本文選擇puppeteer方案介紹如何生成一個pdf報表。細心的小伙伴可能注意到了,既然puppeteer是js庫,為什么不直接前端導出pdf,干嘛這么麻煩還通過后端繞一圈來實現?
這主要出于需求和用戶體驗的考慮,有些業務場景需要通過api接口動態生成pdf報表,不需要用戶訪問界面。如果生成的pdf的報表很大,直接在用戶端生成,可能占用大量客戶端資源,導致頁面崩潰或假死,從而影響使用體驗。
1.先安裝NodeJs,網上教程很多,本文不再贅述。
2.安裝puppeteer依賴,如果npm下載不成功就使用cnpm命令(cnpm需要先安裝)
npm install puppeteer --save
3.在安裝puppeteer依賴的目錄下創建page2pdf.js
const puppeteer=require('puppeteer');
const options=process.argv;
var siteUrl;
//執行 node page2pdf.js https://www.baidu.com
(async()=> {
if(options.length>=3){
siteUrl=options[2];
//types=options[3];
//console.log(siteUrl);
}
const browser=await puppeteer.launch();
const page=await browser.newPage();
//console.log(options.length);
//console.log(options[0]);
//console.log(options[1]);
//console.log(options[2]);
//console.log(options[3]);
const userAgent="Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36";
page.setUserAgent(userAgent);
await page.setViewport({ width: 1000, height: 1080 });
//await page.setViewport({ width: 480, height: 800,isMobile: true});
//通過css樣式可見,動態設置站點加載完成標識。
//page.waitForSelector('img').then(()=> console.log('siteUrl with page load success: ' + siteUrl));
await page.goto(siteUrl, {timeout: 10*60000, waitUntil: 'networkidle2'});
/**await page.goto(siteUrl, {timeout: 10*60000, waitUntil: 'networkidle2'})
.catch(e=> {
console.log(siteUrl+" is error:"+e);
browser.close()
});*/
const pdf=await page.pdf({
path: 'page.pdf', //便于測試驗證,實際使用時可屏蔽
format: 'A4'
});
await browser.close();
process.stdout.write(pdf);
})();
page2pdf.js文件引入puppeteer依賴庫,通過傳入siteUrl參數訪問HTML page頁面,page.pdf生成文件,再通過process.stdout.write(pdf)返回java后臺。
4.創建java PuppeteerHtmlToPdf.java文件
/**
* 用谷歌提供的node實現的Puppeteer,實現網頁生成pdf文件
*/
public class PuppeteerHtmlToPdf {
/**
* html轉pdf,直接通過流輸出到瀏覽器
* @param response 瀏覽器響應
* @param fileName 文件名稱
* @param puppeteerjs 要采用哪個js文件執行
* @param webSiteUrl 要生成pdf的網頁
*/
public static void parseHtml2Pdf(HttpServletResponse response, String fileName, String puppeteerjs, String webSiteUrl) {
try {
Runtime rt=Runtime.getRuntime();
Process p=rt.exec("node "+puppeteerjs+" "+webSiteUrl);
InputStream is=p.getInputStream();
BufferedInputStream bf=new BufferedInputStream(is);
byte[] data=IOUtils.toByteArray(bf);
fileName=URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream;charset=UTF-8");
OutputStream outputStream=new BufferedOutputStream(response.getOutputStream());
outputStream.write(data);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5.報表生成
page2pdf.js頁面目錄打開命令行,執行指令。
運行指令,生成pdf
node page2pdf.js https://www.baidu.com
查看對應目錄,已動態生成了一個page.pdf文件
打開pdf文件,對應HTML內容已生成。
本文介紹了報表導出pdf的3種方式,通過優缺點分析,詳細闡述了puppeteer的實現方式。并通過百度頁面的pdf導出做了演示。
希望本文對有類似報表pdf導出需求的小伙伴有所參考和幫助。若存在不足或更好方案,請留言討論。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。