Chúng tôi có hệ thống dựa trên Java đọc dữ liệu từ cơ sở dữ liệu, hợp nhất các trường dữ liệu riêng lẻ với các thẻ XSL-FO
đặt trước và chuyển kết quả thành PDF
với Apache FOP
.Báo cáo PDF với HTML nhúng
Trong định dạng XSL-FO
nó trông như thế này:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Html [
<!ENTITY nbsp " ">
<!-- all other entities -->
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" font-family="..." font-size="...">
<fo:layout-master-set>
<fo:simple-page-master master-name="Letter Page" page-width="8.500in" page-height="11.000in">
<!-- appropriate settings -->
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="Letter Page">
<!-- some static content -->
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table ...>
<fo:table-column ... />
<fo:table-body>
<fo:table-row>
<fo:table-cell ...>
<fo:block text-align="...">
<fo:inline font-size="..." font-weight="...">
<!-- Header/Title -->
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block>
<fo:table ...>
<fo:table-column ... />
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block ...>
<!-- Field A -->
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<!-- Other fields in a very similar fashion as the above "Field A" -->
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
Bây giờ tôi đang tìm kiếm một cách để cho phép một số lĩnh vực để chứa tĩnh định dạng HTML nội dung. Nội dung này sẽ được tạo bởi trình chỉnh sửa được bật HTML của chúng tôi (thứ gì đó dọc theo các dòng CLEditor
, CKEditor
, v.v.) hoặc được dán từ bên ngoài.
Kế hoạch của tôi là làm theo công thức from this JavaWorld article:
- sử dụng
JTidy
để chuyển đổi chuỗi có định dạng HTML để XHTML đúng - tiếp tục sửa đổi xhtml2fo.xsl từ Antenna Nhà để loại bỏ tất cả các biến đổi tài liệu toàn và trên toàn bộ trang
- áp dụng XSLT biến đổi này để chuỗi XHTML của tôi (javax.xml.transform)
- trích xuất tất cả các nút dưới gốc với XPath (javax.xml.xpath)
- nuôi kết quả trực tiếp vào XSL-FO tài liệu
hiện tại tôi có một phiên bản trần xương mã như vậy và đã nhận lỗi sau:
(Location of error unknown)org.apache.fop1.fo.ValidationException: "{ http://www.w3.org/1999/XSL/Format }table-body" is not a valid child of "fo:block"! (No context info available)
Câu hỏi của tôi:
- Điều gì sẽ là cách để khắc phục vấn đề này?
- Có thể
<fo:block>
đóng vai trò như một container chung với các đối tượng khác (bao gồm cả bảng) được lồng vào bên trong? - Đây có phải là phương pháp tổng thể hợp lý để giải quyết tác vụ không?
Nếu ai đó đã "làm việc đó", vui lòng chia sẻ kinh nghiệm của bạn.
Chúng tôi sẽ cần hỗ trợ một cái gì đó như '' –
Theo như tôi biết, bảng định kiểu mà bạn tham chiếu bỏ qua bất kỳ thuộc tính style = "" nào. Đó là lý do tại sao tôi đã chỉ cho bạn về phía cái kia sẽ xử lý toàn bộ chuỗi kiểu CSS đó và biến chúng thành các thuộc tính FO của XSL. Toàn bộ trang web này dựa trên biểu định kiểu này khi Javascript css-to-pdf giải quyết DOM của trình duyệt (tất cả là thuộc tính style = "") và chuyển đổi đầu vào HTML (X) thành XSL FO và định dạng nó. –
Tôi hơi bối rối ở đây. Bạn có nói rằng XSL của bạn có thể được sử dụng riêng của nó và không phải là một phần của toàn bộ công cụ chuyển đổi đám mây của bạn? –