我想将HTML页面转换为PDF。有几种选择,但它们有一些问题。
PDFCreator
在IE中打印HTML页面(过于繁琐)wkhtmltopdf
(低质量)PhantomJS
(低质量)也许我可以使用复杂的解决方案?要使用PhantomJS
到PDFCreator
进行打印,还是要提高wkhtmltopdf
的质量,还是提高其他内容的质量?
答案 0 :(得分:1)
使用--print-media-type --no-stop-slow-scripts
键修补了wkhtmltopdf(一个非常好的基于WebKit的命令行工具,快速)
chromium --headless --no-zygote --single-process ... --print-to-pdf= ...
(较慢,仅纵向)
通过DevTools协议实现无头铬化(速度慢,只有少数编程语言具有绑定)
围绕Blink Engine的包装器(例如Qt5 https://code.qt.io/cgit/qt/qtwebengine.git/tree/examples/webenginewidgets/html2pdf?h=5.15)
如果您相信容器,请--https://github.com/thecodingmachine/gotenberg(内部-通过DevTools协议无铬)
答案 1 :(得分:0)
也许你可以试试Amyuni WebkitPDF。它不是开源的,但它可以免费用于商业用途,它可以在C#中使用。
文档中的C#示例代码:
static private void SaveToFile(string url, string file)
{
// Store the WebkitPDFContext returned value in an IntPtr
IntPtr context = IntPtr.Zero;
// Open the URL. The WebkitPDFContext returned value will be stored in
// the passed in IntPtr
int ret = WKPDFOpenURL(url, out context, 0, false);
if (ret == 0)
{
// if ret is 0, then we succeeded in opening the URL.
// Save the result as PDF to a file. Use the obtained context value
ret = WKPDFSaveToFile(file, context);
}
if (ret != 0)
Debug.WriteLine("Failed to run SaveToFile on '" + url + "' to generate file '" + file + "'");
// Make sure to close the WebkitPDFContext because otherwise the
// internal PDFCreator as well as other objects will not be released
WKPDFCloseContext(context);
}
通常的免责声明适用。
答案 2 :(得分:0)
您可以使用.NET API的GroupDocs.Conversion将HTML正确转换为PDF。 看一下代码:
// Setup Conversion configuration and Initailize ConversionHandler
ConversionConfig config = new ConversionConfig();
config.StoragePath = "source file storage path";
// Initailize ConversionHandler
ConversionHandler conversionHandler = new ConversionHandler(config);
// Convert and save converted document
var convertedDocumentPath = conversionHandler.Convert("sample.html", new PdfSaveOptions{});
convertedDocumentPath.Save("result-" + Path.GetFileNameWithoutExtension("sample.html") + ".pdf");
披露:我是GroupDocs的开发人员布道者。
答案 3 :(得分:0)
谷歌浏览器Save as PDF
输出看起来完全一样(由 chrome 渲染)
在这里,我使用 Puppeteer 来自动化这个过程:singlefile or in Folder
https://github.com/FuPeiJiang/puppeteer-pdf