有没有一种方法可以像设置边框一样,在NReco中以毫米为单位设置打印页面大小?找到了在docs中指定四种页面大小中的一种的方法,但这还不够精确。
从读取wkhtmltopdf文档本身来看,它似乎也仅限于预定义的页面大小,而不是手动以长度为单位进行设置。
提出这个问题,以防我错了,希望如此。例如,需要将页面设置为15x10 to。
编辑:强制库使用html页面设置(作为不在html中设置任何内容,并在NReco中设置高度/宽度/边距的替代方案,如下面我的部分答案所示)。这一点:
@page {
size: 4in 3in;
margin: 0mm 0mm 0mm 0mm;
}实际上在打印时有效,但当我试图强制NReco使用它时:
pdfConverter.CustomWkHtmlArgs = "--print-media-type";它什么也做不了。示例也来自NReco网站的首页,这使得它更有趣。
发布于 2016-01-22 23:00:51
查看wkhtmltopdf文档中的以下代码片段:
--page-height <unitreal> Page height
-s, --page-size <Size> Set paper size to: A4, Letter, etc.
(default A4)
--page-width <unitreal> Page width我要说的是,使用--page-height和--page-width就可以了。逻辑上会说,它们将设置页面的高度和宽度(以磅为单位),因此您必须计算将厘米或毫米转换为PDF点(一英寸为72点)。
发布于 2016-01-22 23:14:41
注意:如果我到了什么地方,我会编辑这个答案,但现在,我想对于任何可能读到这篇文章的人来说,有东西总比没有好。
发布一个别人可能会觉得有帮助的答案,但这并不是我问题的完整解决方案:
HtmlToPdfConverter pdfConverter = new HtmlToPdfConverter();
//The page width and page height values are in mm
pdfConverter.PageWidth = 102;
pdfConverter.PageHeight = 77; 这不应该是被接受的答案-出于某种原因,它并不完全匹配简单的html大小。例如,如果我创建一个大小比例为4x3的html文档,然后适当地设置这些道具,页面上产生的图像仍然不会占据整个页面(最终会变小)。
如果我运行下面的html并将页面大小设置为102 mm x 72 mm,我会得到下面的屏幕截图,尽管比例是正确的,但这仍然是错误的:
<html>
<head>
<style>
.reportBody {
padding: 0px;
border: 0px;
margin: 0px;
}
.reportTable{
padding: 0px;
border: 0px;
margin: 0px;
width: 102mm;
height: 77mm;
}
</style>
</head>
<body class = "reportBody">
<table class = "reportTable">
<tr>
<td style = "background-color:red">
Row 1 Column 1
</td>
<td style = "background-color:blue">
Row 1 Column 2
</td>
</tr>
<tr>
<td style = "background-color:green">
Row 2 Column 1
</td>
<td style = "background-color:yellow">
Row 2 Column 2
</td>
</tr>
</table>
</body>
</html>

发布于 2016-02-12 02:33:02
对你的问题的快速回答是肯定的,当你使用height和width属性时,这些设置是在mm中的,所以你所做的关于C#代码是正确的,你的大小调整问题是转换器采用了“智能”大小调整技术,默认情况下是打开的。比率是正确的,但尺寸缩小与我遇到的问题完全相同,通过包含--disable-smart-shrinking选项解决了这个问题。
更完整的图片:我刚刚完成了第一步,直接从一个新的剃须刀应用程序打印处方,PDF是通过NReco包装器生成的。我必须打印到一张固定的处方纸(215 it X 176 It),周围有一个小的页边距。这是我在控制器中获得的代码,它将pdf作为fileResult变量返回。
public async Task<ActionResult> OutputScript(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var model = await GetViewModelForScript(id.Value);
if (model == null)
{
return HttpNotFound();
}
// create a string writer to receive the HTML code
StringWriter stringWriter = new StringWriter();
// get the view to render
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, "Script", null);
// create a context to render a view based on a model
ViewContext viewContext = new ViewContext(
ControllerContext,
viewResult.View,
new ViewDataDictionary(model),
new TempDataDictionary(),
stringWriter
);
// render the view to a HTML code
viewResult.View.Render(viewContext, stringWriter);
// return the HTML code
string htmlToConvert = stringWriter.ToString();
// instantiate the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
htmlToPdfConverter.CustomWkHtmlArgs = " --print-media-type --title \"SMS Script " + model.ScriptID + "\" --dpi 300 --disable-smart-shrinking";
htmlToPdfConverter.PageHeight = 215;
htmlToPdfConverter.PageWidth = 176;
var margins = new PageMargins();
margins.Bottom = 4;
margins.Top = 4;
margins.Left = 5;
margins.Right = 5;
htmlToPdfConverter.Margins = margins;
htmlToPdfConverter.Orientation = PageOrientation.Landscape;
// render the HTML code as PDF in memory
byte[] pdfBuffer = htmlToPdfConverter.GeneratePdf(htmlToConvert);
// send the PDF file to browser
FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf");
fileResult.FileDownloadName = "Script.pdf";
return fileResult;
}按照现在的方式,所有的@media print指令都被遵守了,当生成打印的PDF时,隐藏在屏幕上“预览”的标签。
https://stackoverflow.com/questions/34947804
复制相似问题