2011-06-27 196 views
2

我最近在網站上創建了一個功能,該功能將生成一個包含圖像和文本的PDF文檔。這些將被打印出來並粘在咖啡杯上。使用ASP.NET生成打印質量PDF

我已經使用Winnovative HTML進行了PDF轉換。

一切工作正常,但圖像質量太低,打印,看起來垃圾的馬克杯。

我被告知這是因爲圖像只有70dpi(屏幕質量),當它需要300dpi(打印質量)。

有沒有一種方法可以生成這些PDF以便圖像具有打印質量?

+0

是否有他們必須爲PDF的原因?你不能只是創建一個圖像文件下載? – musefan

回答

3

我對iTextSharp的運氣非常好,我用它製作了許多高質量的pdf。但我從頭開始構建PDF,並直接打印。是否有可能在代碼中重新創建頁面內容並打印?做起來相當簡單,並且有很多資源/示例可供您構建。

如果不是,那麼有像pdfcrowd這樣的產品。我不能說我自己用過它。但是我聽說有人使用它來獲得高質量的html到pdf,但是你必須爲特權付費。

+0

感謝您的回覆,當您從頭開始構建代碼時,您使用了哪些代碼來構建它?它是一個HTML字符串嗎?我想知道一個HTML字符串是否會得到渲染,並因此降低質量呢? – Curt

+1

有很多例子可以看,比如[this](http://goo.gl/PdjfM)。 iTextSharp文檔將嚴格限制在代碼中。在一個事件中,你可以閱讀一個頁面的內容,並把它放在一個新的pdf中,並在幕後生成。根據您要重建的內容,您可以通過幾種不同的方式來構建它。只要找到一個類似的例子,並從那裏工作。 –

+0

啊,我明白了,乾杯我現在就放棄它! – Curt

0

當您使用PDF格式的光柵圖像時,其質量變得越來越低,並且您可以放大PDF文檔。爲了進行比較,您應該在PDF查看器中具有100%的縮放級別。如果您要使用PDF格式的高分辨率圖片而不是HTML格式的圖片,您可以在Replace Images from HTML with Higher Quality Images in PDF Demo中看到。該演示的相關C#代碼是:

protected void convertToPdfButton_Click(object sender, EventArgs e) 
{ 
    // Create a HTML to PDF converter object with default settings 
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

    // Set license key received after purchase to use the converter in licensed mode 
    // Leave it not set to use the converter in demo mode 
    htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og="; 

    // Select all images from HTML page 
    htmlToPdfConverter.HtmlElementsMappingOptions.HtmlElementSelectors = new string[] { "img" }; 

    // Exclude the original images from rendering becuase they will be replaced by an image from local file system 
    htmlToPdfConverter.HiddenHtmlElementsSelectors = new string[] { "img" }; 

    Document pdfDocument = null; 
    try 
    { 
     // Convert a HTML string with images to replace to a PDF document object 
     pdfDocument = htmlToPdfConverter.ConvertUrlToPdfDocumentObject(urlTextBox.Text); 

     // Replace the images selected in HTML using special attributes with images from local file system 
     foreach (HtmlElementMapping imageElementInfo in htmlToPdfConverter.HtmlElementsMappingOptions.HtmlElementsMappingResult) 
     { 
      PdfPage imagePdfPage = imageElementInfo.PdfRectangles[0].PdfPage; 
      RectangleF imageRectangle = imageElementInfo.PdfRectangles[0].Rectangle; 

      ImageElement newImageElement = new ImageElement(imageRectangle.X, imageRectangle.Y, imageRectangle.Width, imageRectangle.Height, 
          Server.MapPath("~/DemoAppFiles/Input/Images/box.jpg")); 
      newImageElement.EnlargeEnabled = true; 
      imagePdfPage.AddElement(newImageElement); 
     } 

     // Save the PDF document in a memory buffer 
     byte[] outPdfBuffer = pdfDocument.Save(); 

     // Send the PDF as response to browser 

     // Set response content type 
     Response.AddHeader("Content-Type", "application/pdf"); 

     // Instruct the browser to open the PDF file as an attachment or inline 
     Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Replace_with_Higher_Quality_Images.pdf; size={0}", outPdfBuffer.Length.ToString())); 

     // Write the PDF document buffer to HTTP response 
     Response.BinaryWrite(outPdfBuffer); 

     // End the HTTP response and stop the current page processing 
     Response.End(); 
    } 
    finally 
    { 
     // Close the PDF document 
     if (pdfDocument != null) 
      pdfDocument.Close(); 
    } 
}