目链接地址:https://github.com/stonehank/html-to-md
一个用于转换HTML为Markdown的工具。
可以获取任意的网页内容转为 markdown 之后保存在自己的仓库
注意:只有有效规范的 HTML 文本才能准确显示结果,如<p>abc< ,<i>abc</>等都是无效文本
live-demo: https://stonehank.github.io/html-to-md/
npm -i html-to-md
const html2md = require('html-to-md')
// or if you're using ES6
import html2md from 'html-to-md'
console.log(
html2md('<strong><em>strong and italic</em></strong>', options, force)
)
// ***strong and italic***
名称 | 数据类型 | 默认值 | 说明 |
skipTags | Array |
| 需要忽略的标签名 |
emptyTags | Array | [] | 不仅忽略它本身,它内部所有标签名全部忽略 |
ignoreTags | Array |
| 忽视标签及其内部所有内容 |
aliasTags | Object |
| 为标签定义一个别名(通常作用于一些不常用标签) |
renderCustomTags | Boolean | true | 自定义当前标签部分属性配置 |
tagListener | Function | (props: TagListenerProps): TagListenerReturnProps => props | 定义是否渲染自定义标签(非HTML标签),
|
优先权:skipTags > emptyTags > ignoreTags > aliasTags
例:
html2md('<><b><i>abc</i></b></>', { ignoreTags: [''] })
// ''
html2md('<><b><i>abc</i></b></>', { skipTags: [''] })
// ***abc***
html2md('<><b><i>abc</i></b></>', { emptyTags: [''] })
// abc
html2md('<><b><i>abc</i></b></>', {
skipTags: [''],
aliasTags: { b: 'ul', i: 'li' },
})
// * abc
html2md('<test><b><i>abc</i></b></test>', { renderCustomTags: 'SKIP' })
// ***abc***
值 | 说明 |
true | 表示强制使用自定义配置 |
false | 对自定义配置使用Object.assign操作 |
例:
// 默认 skipTags 为 ['div','html','body']
// 配置一:
html2md('<div><b><i>abc</i></b></div>', { skipTags: ['b'] }, false)
// skipTags 为 ['div','html','body','b']
// 配置二:
html2md('<div><b><i>abc</i></b></div>', { skipTags: ['b'] }, true)
// 经过配置后 skipTags 为 ['b']
key | 说明 |
parentTag | 父标签名,没有则为null |
prevTagName | 上一个标签名,没有则为null |
nextTagName | 下一个标签名,没有则为null |
isFirstSubTag | 是否当前父标签内部的第一个子标签 |
attrs | 当前标签的attributes,以object集合方式,例如 { src, href ... } |
innerHTML | 内部HTML字符串 |
match | 当前的HTML对应Markdown的匹配符号 |
language? | 当前标签语言,只在 pre 标签中出现 |
isSelfClosing | 是否自闭和标签 |
key | 说明 |
attrs | 当前标签的attributes,以object集合方式,例如 { src, href ... } |
match | 返回一个新的自定义匹配符号 |
language? | 返回自定义pre标签的language |
拟机为我们提供了一个无限可能的世界。在这个世界里,我们可以尝试、学习、甚至犯错,而不必担心现实生活中的后果。Emacs,作为一款强大的文本编辑器,它的Org模式更是让人们在组织复杂信息时如鱼得水。但是,当我们尝试将Org文件转换为HTML格式时,有时会遇到一个令人困惑的问题:“source block missing language specification #include”。这是什么意思?它又该如何解决呢?
在深入探讨之前,让我们先来思考一个问题:为什么我们要将Org文件转换为HTML?答案可能各有不同,但一个共同点是,我们都希望能够更好地分享和展示我们的工作。HTML作为一种广泛支持的格式,能够让我们的内容在不同的平台上呈现出一致的效果。这就像是我们穿上了一件合身的外衣,让内在的价值得以外显。
当我们遇到“source block missing language specification #include”的提示时,我们应该怎么办呢?首先,我们需要理解这个提示的含义。在Emacs的Org模式中,当我们使用源代码块时,通常需要指定语言类型,比如#+BEGIN_SRC python。这样,Emacs就能够知道如何高亮和格式化我们的代码。但如果我们忘记了这一步,就会收到上述的提示。
解决这个问题的方法其实很简单。我们只需要回到源代码块的开始,确保正确地指定了语言类型。如果是包含在文件中的代码,比如C语言的头文件,我们可以使用#+INCLUDE: "file.h" src c这样的语法来引入。
通过这个简单的修正,我们就能够顺利地将Org文件转换为HTML,而不会再有任何阻碍。这个过程就像是我们在虚拟世界中解决了一个谜题,获得了前进的钥匙。
并且可以尝试以下几种方法来解决:
方法一:添加语言规范
在 Org 文档中,对于包含代码块的文本,需要添加语言规范,以便 Org-mode 正确地解析和转换代码。
具体步骤如下:
在代码块的开头,添加一行指示语言规范的注释。例如,对于 C 语言代码,可以添加以下注释:
#lang c
再次尝试将 Org 文档转换为 HTML。
方法二:使用 org-babel
org-babel 是 Org-mode 的一个扩展包,可以用于将代码块转换为各种格式,包括 HTML。
具体步骤如下:
安装 org-babel 扩展包。
M-x package-install RET org-babel
在 Org 文档中,将代码块标记为 babel 块。例如,对于 C 语言代码,可以使用以下标记:
#+begin_src c#include <stdio.h>int main() { printf("Hello, world!\n"); return 0;}#+end_src
再次尝试将 Org 文档转换为 HTML。
方法三:使用 org-html-export-filter
org-html-export-filter 是 Org-mode 的一个函数,可以用于在导出 HTML 时自定义代码块的转换。
具体步骤如下:
在 Emacs 配置文件中,添加以下代码:
(defun my-org-html-export-filter (block) "自定义代码块的转换。" (if (string-match-p "^#lang\s+c\s*$" (org-block-property block :language)) (org-html-export-filter-block-as-code block "c" "highlight") (org-html-export-filter-block-as-verbatim block)))(add-hook 'org-html-export-filter-alist 'my-org-html-export-filter)
再次尝试将 Org 文档转换为 HTML。
以上三种方法都可以解决 Org 转为 HTML 时提示“source block missing language specification #include<stdio.h>”的问题。具体选择哪种方法,可以根据自己的实际情况和需求来决定。
.NET的SelectPdf Html到Pdf转换器-社区版是.NET的SelectPdf库中提供的功能强大的html到pdf转换器的免费版本。
转换器提供了许多强大的选项(将任何网页转换为pdf,将任何html字符串转换为pdf,html5 / css3 / javascript支持,页眉和页脚支持等),唯一的限制是它最多可以生成pdf文档。5页长。
.NET的免费HTML至Pdf转换器–社区版功能:最多生成5页pdf文档,将任何网页转换为pdf,将任何原始html字符串转换为pdf,设置pdf页面设置(页面大小,页面方向,页面边距) ,在转换过程中调整内容大小以适合pdf页面,设置pdf文档属性,设置pdf查看器首选项,设置pdf安全性(密码,权限),设置转换延迟和网页导航超时,自定义页眉和页脚,在页眉中支持html和页脚,自动和手动分页符,在每个页面上重复html表头,支持@media类型屏幕和打印,支持内部和外部链接,基于html元素自动生成书签,支持HTTP标头,支持HTTP cookie,支持需要身份验证的网页,支持代理服务器,启用/禁用javascript,修改颜色空间,多线程支持,HTML5 / CSS3支持,Web字体支持等等。
1、nuget 引用
Install-Package Select.HtmlToPdf
2、方法
using SelectPdf;
using System.Collections.Specialized;
using System.IO;
using System.Web;
namespace BQoolCommon.Helpers.File
{
public class WebToPdf
{
public WebToPdf()
{
//SelectPdf.GlobalProperties.LicenseKey = "your-license-key";
}
/// <summary>
/// 將 Html 轉成 PDF,並儲存成檔案
/// </summary>
/// <param name="html">html</param>
/// <param name="fileName">絕對路徑</param>
public void SaveToFileByHtml(string html, string fileName)
{
var doc = SetPdfDocument(html);
doc.Save(fileName);
}
/// <summary>
/// 傳入 Url 轉成 PDF,並儲存成檔案
/// </summary>
/// <param name="url">url</param>
/// <param name="fileName">絕對路徑</param>
/// <param name="httpCookies">Cookies</param>
public void SaveToFileByUrl(string url, string fileName, NameValueCollection httpCookies)
{
var doc = SetPdfDocument(url, httpCookies);
doc.Save(fileName);
}
/// <summary>
/// 將 Html 轉成 PDF,並輸出成 byte[] 格式
/// </summary>
/// <param name="html">html</param>
/// <returns></returns>
public byte[] GetFileByteByHtml(string html)
{
var doc = SetPdfDocument(html);
return doc.Save();
}
/// <summary>
/// 傳入 Url 轉成 PDF,並輸出成 byte[] 格式
/// </summary>
/// <param name="url">url</param>
/// <param name="httpCookies">Cookies</param>
/// <returns></returns>
public byte[] GetFileByteByUrl(string url, NameValueCollection httpCookies)
{
var doc = SetPdfDocument(url, httpCookies);
return doc.Save();
}
/// <summary>
/// 將 Html 轉成 PDF,並輸出成 Stream 格式
/// </summary>
/// <param name="html">html</param>
/// <returns></returns>
public Stream GetFileStreamByHtml(string html)
{
var doc = SetPdfDocument(html);
var pdfStream = new MemoryStream();
doc.Save(pdfStream);
pdfStream.Position = 0;
return pdfStream;
}
/// <summary>
/// 傳入 Url 轉成 PDF,並輸出成 Stream 格式
/// </summary>
/// <param name="html">html</param>
/// <returns></returns>
public Stream GetFileStreamByUrl(string url, NameValueCollection httpCookies)
{
var doc = SetPdfDocument(url, httpCookies);
var pdfStream = new MemoryStream();
doc.Save(pdfStream);
pdfStream.Position = 0;
return pdfStream;
}
private PdfDocument SetPdfDocument(string html)
{
var converter = new HtmlToPdf();
converter.Options.WebPageWidth = 1200;
html = HttpUtility.HtmlDecode(html);
return converter.ConvertHtmlString(html);
}
private PdfDocument SetPdfDocument(string url, NameValueCollection httpCookies)
{
var converter = new HtmlToPdf();
converter.Options.WebPageWidth = 1200;
if (httpCookies != && httpCookies.Count != 0)
{
converter.Options.HttpCookies.Add(httpCookies);
}
return converter.ConvertUrl(url);
}
}
}
3、调用
/// <summary>
/// 下载pdf
/// </summary>
public void Downpdf(string data)
{
var stream = new BQoolCommon.Helpers.File.WebToPdf().GetFileStreamByHtml(Gethtml(data));
Response.Clear();
//二进制流数据(如常见的文件下载)
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("Profit and Loss Statement.pdf", System.Text.Encoding.UTF8));
var bytes = StreamToBytes(stream);
Response.BinaryWrite(bytes);
Response.Flush();
stream.Close();
stream.Dispose();
Response.End();
}
那么如何获取指定页面的html 呢 传入对应的model 获得指定动态的html
private string Gethtml(string data)
{
string str = "";
str = this.ControllerContext.RenderViewToString("ProfitDetails", data);
return str;
}
using BQoolCommon.Helpers.Format;
using Newtonsoft.Json;
using OrdersManager.Models.ViewModel.Report;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace OrdersManager.Web.Infrastructure
{
public static class HelperExtensions
{
public static string RenderViewToString(this ControllerContext context, string viewName, string data)
{
if (string.IsOrEmpty(viewName))
viewName = context.RouteData.GetRequiredString("action");
context.Controller.ViewData.Model = JsonConvert.DeserializeObject<ProfitDetailsmodel>(StringTools.Base64Decode(StringTools.Base64Decode(data)));
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
var viewContext = new ViewContext(context,
viewResult.View,
context.Controller.ViewData,
context.Controller.TempData,
sw);
try
{
viewResult.View.Render(viewContext, sw);
}
catch (Exception ex)
{
throw;
}
return sw.GetStringBuilder().ToString();
}
}
}
}
https://www.nuget.org/packages/Select.HtmlToPdf/
*请认真填写需求信息,我们会在24小时内与您取得联系。