Создание PDF-файла с качеством печати с использованием ASP.NET - PullRequest
2 голосов
/ 27 июня 2011

Недавно я создал на веб-сайте функцию, которая будет генерировать PDF-документ, содержащий изображения и текст. Затем они будут распечатаны и наклеены на кофейные кружки.

Я сделал это с помощью преобразования Winnovative HTML в PDF.

Все работает отлично, однако качество изображения слишком низкое для печати и на кружках выглядит мусор.

Мне сказали, что причина этого в том, что изображение будет иметь разрешение 70 точек на дюйм (качество экрана), тогда как оно должно быть 300 точек на дюйм (качество печати).

Можно ли как-нибудь сгенерировать эти PDF-файлы, чтобы изображения имели качество печати?

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Мне очень повезло с iTextSharp, я создаю много PDF-файлов хорошего качества.Но я создаю PDF-файлы с нуля и печатаю напрямую.Можно ли было воссоздать содержимое страницы в коде и распечатать?Это довольно просто сделать, и есть много ресурсов / примеров для сборки.

Если нет, есть несколько продуктов, таких как pdfcrowd .Я не могу сказать, что использовал это сам.Но я слышал о людях, которые используют его для высококачественного HTML в PDF, но вы должны заплатить за эту привилегию.

0 голосов
/ 08 сентября 2014

Если у вас есть растровое изображение в формате PDF, его качество становится все ниже и ниже, и вы увеличиваете размер документа PDF. Для хорошего сравнения у вас должен быть 100% уровень масштабирования в программе просмотра PDF. Если у вас есть изображение с более высоким разрешением, которое вы хотите использовать в PDF вместо изображения из HTML, вы можете сделать это, как вы можете видеть в Заменить изображения из HTML изображениями более высокого качества в 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();
    }
}
...