2013-07-11 49 views
6

Tôi có một yêu cầu để trao đổi một bản PDF của các bản ghi XML. Tôi nghĩ rằng không có cách nào để trực tiếp tạo pdf từ xml nhưng sử dụng XSLT hoặc XSL FO tôi tin rằng nó có thể được thực hiện. Tôi đã đọc rất nhiều bài báo tìm kiếm cách tốt để làm điều đó bằng cách sử dụng C#.Cách tốt nhất để tạo PDF từ XSLT XML trong C#

-> Cách tiếp cận tốt nhất trong thời gian này là gì? bất kỳ ví dụ nào thực sự sẽ tuyệt vời.

Kịch bản của tôi:

Tôi có XML trông giống như:

<Products> 
    <Brand name="Test"> 
    <Quantity value="2/> 
    <Price value="$20"/> 
    </Brand> 
    <Brand name="Test2"> 
    <Quantity value="3/> 
    <Price value="$30"/> 
    </Brand> 
    <Brand name="Test3"> 
    <Quantity value="4/> 
    <Price value="$40"/> 
    </Brand> 
</Products> 

Làm thế nào tôi có thể tạo ra một pdf rằng sẽ có một bảng hiển thị tất cả thông tin này?

Tôi biết có rất nhiều câu hỏi tương tự như thế này nhưng hầu hết các câu hỏi đều lỗi thời. Bất kỳ trợ giúp thực sự đánh giá cao.

+0

Bạn đã thử những gì? Vì bạn đề cập đến FO: bạn đã thử * FO chưa? Ví dụ: fonet.codeplex.net? Lưu ý rằng FO không phải là tầm thường - bạn cần phải làm nhiều công việc hơn mà bạn làm cho HTML, làm ví dụ. Ngoài ra: bạn đã xem xét bất kỳ công cụ chuyển đổi html-to-PDF nào chưa? (Tôi từng sử dụng HTMLDOC rất nhiều, một vài năm trở lại). Hoặc bất kỳ công cụ tạo PDF cấp thấp nào? –

+0

được sao chép http://stackoverflow.com/questions/1674257/using-xml-xslt-and-c-sharp-to-create-an-rtf-or-pdf – Mennan

+0

Như tôi đã đề cập, chúng hầu như đã lỗi thời cập nhật lần cuối cho FO là vào năm 2009. Tôi đang tìm một cái gì đó có thể dễ dàng sử dụng trong C#, và có thể được lấy làm công cụ tốt nhất để tự động hóa việc tạo pdf thông qua mã. Tôi đã xem http://report.sourceforge.net/, http://itextpdf.com/terms-of-use/index.php, http://www.pdfsharp.com/PDFsharp/ và một vài thứ nữa nhưng cần phản hồi từ những người đã sử dụng nó. – Bravo11

Trả lời

5

Trước đây tôi đã sử dụng thư viện thương mại được gọi là Ibex PDF Creator để tạo tài liệu PDF từ dữ liệu XML sử dụng tiêu chuẩn XSL-FO đã hoạt động thực sự tốt.

Dưới đây là một ví dụ về làm thế nào tôi sẽ sử dụng nó: Dữ liệu

XML:

<DocumentRoot> 
    <!-- Some content --> 
</DocumentRoot> 

XSL-FO bố trí:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/DocumentRoot"> 
     <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:ibex="http://www.xmlpdf.com/2003/ibex/Format"> 
      <ibex:properties 
       title="Some document" 
       subject="" 
       author="" 
       keywords="" 
       creator="" /> 
      <fo:layout-master-set> 
       <fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm"> 
        <fo:region-body margin-bottom="1cm" margin-top="3cm"/> 
        <fo:region-before extent="20mm"/> 
        <fo:region-after extent="8mm"/> 
        <fo:region-start extent="1mm"/> 
        <fo:region-end extent="1mm"/> 
       </fo:simple-page-master> 
      </fo:layout-master-set> 
     </<fo:root> 
    </xsl:template> 
</xsl:stylesheet> 

Tạo các tài liệu PDF trong .NET:

var data = new MemoryStream(dataBytes); 
var layout = new MemoryStream(layoutBytes); 
var pdf = new MemoryStream(); 

// Using the Ibex PDF Creator .NET API 
var doc = new FODocument(); 
doc.generate(data, layout, pdf); 

Tôi hy vọng điều này sẽ hữu ích.

+0

Cảm ơn Enrico bạn có đề xuất bất kỳ giải pháp thay thế mã nguồn mở nào không? – Bravo11

+0

Cá nhân, tôi chưa thử bất kỳ giải pháp thay thế nguồn mở nào cho XSL-FO. Vì dự án tôi đang làm là xây dựng một sản phẩm, chúng tôi đã chọn để đi với một thư viện thương mại cho tài liệu và hỗ trợ. –

+0

Cảm ơn bạn đã trả lời. Hy vọng điều này cũng sẽ giúp tôi. – Bravo11

-1

Bạn có thể tạo tệp pdf từ xml bằng cách sử dụng Aspose.PDF cho .NET API. Tôi có thể tìm mẫu mã cho transforming xml to pdf in C#/.NET trên trang tài liệu Aspose cho pdf.

1

Tôi đã sử dụng Apache Fop.bat trong một phương pháp như thế này. (sử dụng System.Diagnostics)

private void XML_TO_PDF_VIA_FOP(String xmlName, String xsltName, String pdfName) 
    { 
     String batchFile = "XSLT\\FOPv1\\fop.bat";  
     String xmlFile = xmlName; 
     String xsltFile = "XSLT\\" + xsltName; 
     String pdfFile = pdfName; 
     Process.Start(batchFile, " -xml " + xmlFile + " -xsl " + xsltFile + " -pdf " + pdfFile); 
    } 
+1

cách tạo Fop.bat? – Kalanamith

+0

tải xuống từ (https://xmlgraphics.apache.org/fop/) – gman

Các vấn đề liên quan