2009-02-20 42 views
10

Tôi đang gửi email có hoá đơn được đính kèm dưới dạng PDF. Tôi đã - ở nơi khác trong ứng dụng - tạo hóa đơn trong trang .aspx. Tôi muốn sử dụng Server.Execute để trả về HTML đầu ra và tạo một tệp PDF từ đó. Nếu không, tôi phải sử dụng công cụ báo cáo để "vẽ" hóa đơn trên một tệp PDF. Điều đó thổi cho rất nhiều lý do, không phải ít nhất là vì tôi phải cập nhật cả trang .aspx và báo cáo cho mọi thay đổi nhỏ. Phải làm gì ...Tạo PDF từ ASP.NET từ nội dung HTML/CSS thô?

+0

bản sao có thể có của http://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net –

Trả lời

5

Không có cách nào để tạo tệp PDF từ chuỗi HTML trực tiếp trong .NET, nhưng có một số kiểm soát của bên thứ ba hoạt động tốt.

Tôi đã thành công với một này: http://www.html-to-pdf.net và điều này: http://www.htmltopdfasp.net

Những câu hỏi quan trọng để hỏi là:

  1. Liệu nó render chính xác so với 3 trình duyệt phổ biến: IE, FF và Safari/Chrome?
  2. Ứng dụng có xử lý CSS không?
  3. Công cụ kiểm soát có công cụ hiển thị của riêng nó không? Nếu vậy, trả lại nó. Bạn không muốn tin tưởng vào một công cụ dựng hình được phát triển tại nhà - các trình duyệt có một vấn đề đủ khó để có được mọi thứ pixel hoàn hảo.
  4. Kiểm soát của bên thứ ba yêu cầu phụ thuộc nào? Càng ít càng tốt.

Có một vài cách khác nhưng chúng xử lý với các màn hình ActiveX và như vậy.

+0

Liên kết htmltopdfasp không hoạt động. – prograde

1

Miễn là bạn có thể đảm bảo sử dụng đúng XHTML, bạn cũng có thể sử dụng một sản phẩm như Alt-Soft's Xml2PDF để chuyển đổi XML (XHTML) sang PDF bằng phương tiện XSLT/XSL-FO.

Mất một chút đường cong học tập để làm chủ, nhưng nó hoạt động rất tốt khi bạn đã "có" nó!

Marc

+0

Giấy phép chuẩn: US $ 1,495 – Junto

+0

@Junto: vâng - vì vậy - tạo phần mềm tốn tiền - vì vậy công cụ không chỉ là ** MIỄN PHÍ ** - nhưng có ** IS ** phiên bản Xml2Pdf Workstation miễn phí, quá –

+0

@marc -s Tất nhiên nó chi phí tiền bạc, nhưng nó cũng không làm tổn thương để tiết lộ rằng đây là một sản phẩm trả tiền và giấy phép tiêu chuẩn là cần thiết để tạo ra các tệp PDF từ nội dung HTML. – Junto

2

này nghe có vẻ như một công việc cho Prince. Nó có thể lấy HTML và CSS và tạo ra một PDF, mà sau đó bạn có thể trình bày cho người dùng của bạn. Nó hỗ trợ CSS3 tốt hơn so với hầu hết các trình duyệt web (nhân viên bao gồm Håkon Wium Lie, người phát minh ra CSS).

Xem samples, đặc biệt là trang dành cho các trang Wikipedia, để có được kết quả đầu ra đẹp mắt. Ngoài ra còn có một thú vị Google Tech Talk với các tác giả.

Chỉnh sửa: Có sẵn .NET wrapper.

+0

Sản phẩm này có vẻ tốt, nhưng nó không thực sự được xây dựng tốt để được đóng gói với một ứng dụng .NET. Dường như họ có một .dll bạn có thể quấn ít nhất. –

+0

Tôi không thể nói rằng tôi đã thử - Tôi đã sử dụng nó với MindTouch Deki, gọi trực tiếp .exe.Những gì tôi có thể nói là đầu ra là tuyệt đẹp - nó giống như LaTeX hơn CutePDF từ Internet Explorer :) – crb

+1

Không đào logo mà họ tack lên trang đầu tiên của mỗi tài liệu – Levitikon

1

Vì bạn đang sản xuất các câu trả lời, bạn có thể sử dụng một công cụ như Report.NET: http://sourceforge.net/projects/report/

Tôi không đồng ý với câu trả lời đó nói rằng bạn không thể chuyển đổi trực tiếp từ đầu ra sang PDF, tuy nhiên, như bạn có thể "tái -call "trang và nhận HTML dưới dạng luồng và chuyển đổi nó. Tuy nhiên, tôi không chắc bạn muốn sử dụng công cụ nào để thực hiện điều này. Nói cách khác, điều đó là có thể, nhưng tôi không chắc nó có xứng đáng không. Các lib tạo PDF, như Báo cáo.NET, mặc dù họ buộc sử dụng lại một số logic và không có hội tụ automagic, nó được dễ dàng hơn.

Tôi chưa thử thành phần này, nhưng tôi đã nghe những điều tốt đẹp về nó từ những người có. Mô hình này giống HTML hơn, nhưng tôi không chắc chắn bạn có thể gửi một ASPX được hiển thị tới nó để tạo PDF: http://www.websupergoo.com/abcpdf-8.htm

0

Tôi muốn đi một tuyến đường khác. Giả sử bạn đang sử dụng SQL Server, hãy sử dụng SSRS và tạo PDF theo cách đó.

1

Nếu bạn cố gắng tìm một số phần mềm html sang pdf qua GOOGLE bạn sẽ nhận được một đống nội dung này. Có khoảng 10 nhà lãnh đạo nhưng hầu hết trong số họ sử dụng dll IE trong chế độ nền. Chỉ một vài người trong số họ sử dụng công cụ phân tích cú pháp của riêng họ. Hãy thử PDF Duo .NET thành phần trong dự án ASP.NET của bạn nếu bạn muốn tạo một chương trình PDF. Đây là thành phần nhẹ để tạo ra các cuộc gọi PDF hữu ích, báo cáo, ví dụ:

+0

Giấy phép trang web: US $ 1170 – Junto

2

wkhtmltopdf là một exe miễn phí và tuyệt vời để tạo pdf từ html. Nó được viết bằng C++. Nhưng nReco htmltopdf là một thư viện dotnet bao bọc cho công cụ tuyệt vời này. Tôi thực hiện bằng cách sử dụng thư viện dotnet này và nó đã được như vậy tốt nó làm tất cả mọi thứ bằng cách riêng của mình, bạn chỉ cần cung cấp cho html như là một nguồn dữ liệu.

/// <summary> 
/// Converts html into PDF using nReco dll and wkhtmltopdf.exe. 
/// </summary>  
private byte[] ConvertHtmlToPDF() 
{ 
    HtmlToPdfConverter nRecohtmltoPdfObj = new HtmlToPdfConverter(); 
    nRecohtmltoPdfObj.Orientation = PageOrientation.Portrait; 
    nRecohtmltoPdfObj.PageFooterHtml = CreatePDFFooter(); 
    nRecohtmltoPdfObj.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";   
    return nRecohtmltoPdfObj.GeneratePdf(CreatePDFScript() + ShowHtml() + "</body></html>"); 
} 

Chức năng ở trên là trích đoạn từ bài đăng liên kết dưới đây giải thích chi tiết. HTML to PDF in ASP.Net

2

Câu hỏi đầu tiên là về việc chuyển đổi một trang aspx khác có chứa hóa đơn sang tài liệu PDF. Hoá đơn có thể sử dụng một số dữ liệu phiên và người dùng đề xuất sử dụng Máy chủ.Execute() để lấy mã HTML trang hóa đơn và sau đó chuyển đổi mã đó thành PDF. Việc chuyển đổi URL trang hóa đơn trực tiếp là không thể vì một phiên mới sẽ được tạo trong khi chuyển đổi và dữ liệu phiên sẽ bị mất.

Đây thực sự là một kỹ thuật tốt để duy trì dữ liệu phiên trong quá trình chuyển đổi được áp dụng trong Convert a HTML Page to PDF in Same Session ASP.NET Demo của thư viện EvoPdf. Hoàn chỉnh C# code để có được những chuỗi HTML rendered bởi trang hóa đơn và để chuyển đổi chuỗi sang PDF là:

// Execute the invoice page and get the HTML string rendered by this page 
TextWriter outTextWriter = new StringWriter(); 
Server.Execute("Invoice.aspx", outTextWriter); 

string htmlStringToConvert = outTextWriter.ToString(); 

// Create a HTML to PDF converter object with default settings 
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

// Use the current page URL as base URL 
string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri; 

// Convert the page HTML string to a PDF document in a memory buffer 
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl); 

// 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=Convert_Page_in_Same_Session.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(); 
0

Một giải pháp tối thiểu có thể sử dụng Server.Execute() để lấy mã HTML của trang hóa đơn và chuyển đổi mã mà để một PDF bằng cách sử winnovative html to pdf api for .net là:

TextWriter outTextWriter = new StringWriter(); 
Server.Execute("Invoice.aspx", outTextWriter); 

HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(), 
      httpContext.Current.Request.Url.AbsoluteUri); 
0

Bạn có thể sử dụng PDFSharp hoặc iTextSharp để chuyển đổi html sang pdf. PDFSharp không miễn phí.