2016-01-22 565 views
2

有没有一种方法可以在NReco中设置以毫米为单位的打印页面大小,就像您可以使用边框一样 - 在html中为wkhtmltopdf的pdf包装?找到一种方法来指定docs中的四种页面大小之一,但这不够精确。以NReco为单位设置页面大小(WkHtmlToPdf)

从阅读wkhtmltopdf文档本身来看,它似乎也限于预定义的页面大小,而不是以长度为单位手动设置它们。

提出这个问题,以防万一我希望是错的。例如,需要将页面设置为15x10cm。

编辑:我无法迫使图书馆使用html页面设置(作为在html中设置任何内容以及在NReco中设置高度/宽度/边距的替代方法,如下面我的部分答案所示)。这:

@page { 
     size: 4in 3in; 
     margin: 0mm 0mm 0mm 0mm; 
    } 

实际工作中的打印,但是当我试图迫使NReco与使用它:

pdfConverter.CustomWkHtmlArgs = "--print-media-type"; 

它什么都不做。例子来自NReco网站的首页,这使得它更有趣。

回答

1

望着从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高度和--page宽度会做的伎俩。逻辑会说,这些将设置页面的高度和宽度的点,所以你必须做数学转换你的厘米或毫米为PDF点(一英寸72点)。

+0

我正在使用NReco包装。包装器将页面尺寸设置为毫米或设置为默认的“A4”尺寸,如上所示。我把你的答案提高了,因为我确信它可以在wkhtml本身中工作,但是我仍然无法正确地渲染东西(请参阅我的答案),所以我现在就把它打开。 – VSO

0

注意:如果我到某个地方,我会编辑这个答案,但是现在,我猜想任何人都可能读这个东西比什么都好。

发布一个答案,其他人可能会发现有用的,但不是完整的解决我的问题:

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毫米×72毫米我得到下面的截图,这是路要走,尽管具有比右:

<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> 

enter image description here

1

快速回答您的问题是肯定的,当您使用heightwidth属性时,设置在mm中,所以您在做什么对于C#代码是正确的,您的尺寸问题是转换器采用了“智能”大小调整技术默认。这个比例是正确的,但减少的尺寸与我的问题完全相同,这是通过包含--disable-smart-shrinking选项解决的。

如需更全面的照片: 我刚刚完成了一项直接从新Razor应用程序获得处方打印的步骤,这些PDF是通过NReco包装生成的。我必须打印一张固定的处方单(215毫米x 176毫米),并在其周围留有一点空白。这是我在控制器中获得的代码,它返回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屏幕“预览”标签的方式。

+0

我通过设置缩放设置而不是禁用智能收缩来“解决”了问题:converter.Zoom = 2;两个只是在这里2x。我必须分别为amazon服务器,azure服务器和本地机器配置缩放设置,因为显然它基于内置在图形系统中的机器(不问)。我也写了自己的帮手,将注释放在PDF转换器可以看到的html中。如果这是你会发现有用的东西,让我知道。随着您和我尝试的一切,我仍然无法获得非常小的利润率,无需黑客即可进行正确打印。 – VSO