我一直在尝试通过Apache FOP将我的XML文档转换为PDF, 但是输出pdf是空白的。
非常感谢任何有关为何发生这种情况的帮助。
代码似乎没有错误地执行:
C:\ Users \ dfh \ Desktop \ fop-0.20.5> fop -xml DICENTIA_SDC_SN_1_224860.xml -xsl testx sl.xsl -pdf test2.pdf [INFO]使用org.apache.xerces.parsers.SAXParser作为SAX2 Parser [INFO] FOP 0.20.5 [INFO]使用org.apache.xerces.parsers.SAXParser作为SAX2 Parser [INFO]构建格式化对象树 [INFO]设置字体 [INFO]解析文档完成,停止渲染器
XSL文件(testxsl):
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm">
<fo:region-body margin-top="3cm" />
<fo:region-before extent="3cm" />
<fo:region-after extent="1.5cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="SDC_SN_1/General" />
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="SDC_SN_1/General">
<fo:block>
<xsl:apply-templates select="Document_No" />
</fo:block>
</xsl:template>
<xsl:template match="SDC_SN_1/General/Document_No">
<fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify">
<xsl:value-of select="SDC_SN_1/General/Document_No" />
</fo:block>
</xsl:template>
</xsl:stylesheet>
XML文件:
<?xml version="1.0"?>
<?xml:stylesheet type="text/xsl" href="../xsl/SN_1.xsl" ?>
<SDC_SN_1>
<General>
<Our_Mail_Address></Our_Mail_Address>
<Document_Number>850</Document_Number>
<Sell_to_Customer Number="815">
<Name></Name>
<Additional_Name_Info></Additional_Name_Info>
<Address></Address>
<Additional_Address_Info></Additional_Address_Info>
<City>Valby</City>
<Contact_Person></Contact_Person>
<Post_Code>2500</Post_Code>
<County></County>
<Country_Code>Danmark</Country_Code>
</Sell_to_Customer>
<Requisition>DOWNTOWN</Requisition>
<Your_Reference>kristina</Your_Reference>
<Our_Reference></Our_Reference>
<Order_Date></Order_Date>
<Document_Creation_Date>30/07-2010</Document_Creation_Date>
<Salesperson>INT</Salesperson>
<Order_Number></Order_Number>
<Job_Number></Job_Number>
<VAT_Registration_Number></VAT_Registration_Number>
<INTRASTAT_Transaction_Type></INTRASTAT_Transaction_Type>
<INTRASTAT_Transport_Method></INTRASTAT_Transport_Method>
<Exit_Point></Exit_Point>
<External_Document_Number></External_Document_Number>
<Posting_Date></Posting_Date>
<EU_Third_Party_Trade></EU_Third_Party_Trade>
<Customer_Order_Number></Customer_Order_Number>
<Customer_Order_Number2></Customer_Order_Number2>
</General>
<Invoicing>
<Bill_to_Customer Number="">
<Name></Name>
<Additional_Name_Info></Additional_Name_Info>
<Address></Address>
<Additional_Address_Info></Additional_Address_Info>
<City>Valby</City>
<Contact_Person></Contact_Person>
<Post_Code>2500</Post_Code>
<County></County>
<Country_Code>Danmark</Country_Code>
</Bill_to_Customer>
<Department></Department>
<Project></Project>
</Invoicing>
<Shipping>
<Ship_to_Customer>
<Code></Code>
<Name></Name>
<Additional_Name_Info></Additional_Name_Info>
<Address></Address>
<Additional_Address_Info></Additional_Address_Info>
<City>Haslev</City>
<Contact_Person></Contact_Person>
<Post_Code>4690</Post_Code>
<County></County>
<Country_Code>Danmark</Country_Code>
</Ship_to_Customer>
<Shipment_Date>30/07-2010</Shipment_Date>
<Shipment_Date_Receive>02/08-2010</Shipment_Date_Receive>
<Shipment_Time_Receive></Shipment_Time_Receive>
<Shipment_Method></Shipment_Method>
<Shipment_Condition>Freight, Carriage paid to</Shipment_Condition>
<Location_in_Inventory></Location_in_Inventory>
<Shipping_Agent></Shipping_Agent>
<Package_Tracking_Number></Package_Tracking_Number>
<Currency></Currency>
<Shipment_From_Time></Shipment_From_Time>
<Shipment_To_Time></Shipment_To_Time>
<Shipment_Colli></Shipment_Colli>
<Shipment_Net_Weight></Shipment_Net_Weight>
<Shipment_Gross_Weight></Shipment_Gross_Weight>
</Shipping>
<Company_Info>
<Company_Name></Company_Name>
<Company_Additional_Name_Info></Company_Additional_Name_Info>
<Company_Address></Company_Address>
<Company_Address_Additional_Address_Info></Company_Address_Additional_Address_Info>
<Company_City></Company_City>
<Company_Phone_Number></Company_Phone_Number>
<Company_Additional_Phone_Number></Company_Additional_Phone_Number>
<Company_Telex_Number></Company_Telex_Number>
<Company_Fax_Number></Company_Fax_Number>
<Company_Giro_Number></Company_Giro_Number>
<Company_Bank_Name></Company_Bank_Name>
<Company_Bank_Branch_Number></Company_Bank_Branch_Number>
<Company_Bank_Account_Number></Company_Bank_Account_Number>
<Company_Payment_Routing_Number></Company_Payment_Routing_Number>
<Company_VAT_Registration_Number></Company_VAT_Registration_Number>
<Company_Registration_Number></Company_Registration_Number>
<Company_Location_in_Inventory></Company_Location_in_Inventory>
<Company_Post_Code></Company_Post_Code>
<Company_County></Company_County>
<Company_E_Mail></Company_E_Mail>
<Company_Home_Page></Company_Home_Page>
</Company_Info>
<Line Line_Type="item">
<Number></Number>
<Catalog_Number></Catalog_Number>
<Location_in_Inventory></Location_in_Inventory>
<Shipment_Date></Shipment_Date>
<Description></Description>
<Additional_Description></Additional_Description>
<Unit_of_Measure></Unit_of_Measure>
<Ordered></Ordered>
<Quantity></Quantity>
<Back></Back>
<Item_Gross_Weight></Item_Gross_Weight>
<Item_Net_Weight></Item_Net_Weight>
<Units_per_Parcel></Units_per_Parcel>
<Unit_Volume></Unit_Volume>
<Department></Department>
<Project></Project>
<Job_Number></Job_Number>
<Item_Serial_Number></Item_Serial_Number>
<Order_Number></Order_Number>
<Order_Line_Number></Order_Line_Number>
<INTRASTAT_Transaction_Type></INTRASTAT_Transaction_Type>
<INTRASTAT_Transport_Method></INTRASTAT_Transport_Method>
<Exit_Point></Exit_Point>
<INTRASTAT_Area></INTRASTAT_Area>
<Lot_Number></Lot_Number>
<Item_Variant></Item_Variant>
<Bin_Code></Bin_Code>
<Unit_of_Measure_Code></Unit_of_Measure_Code>
<Common_Item_Number></Common_Item_Number>
<Customer_Item_Number></Customer_Item_Number>
<Line_Note>
<Note_Line></Note_Line>
</Line_Note>
</Line>
</SDC_SN_1>
答案 0 :(得分:3)
您仍然获得空白PDF的主要原因是您的其他模板永远不会被应用。我对样式表做了一些更改(例如添加标识转换,更改select
,删除不必要的模板并修复Document_Number
的拼写)并且我得到了输出PDF。
XSL的修改版本:
<?xml version="1.0" encoding="UTF-8" ?>
<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 indent="yes"/>
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<xsl:template match="SDC_SN_1">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="General/Document_Number"/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="Document_Number">
<fo:block font-size="12pt" font-family="sans-serif" line-height="15pt" space-after.optimum="3pt" text-align="justify">
<xsl:value-of select="."/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
我还编写了一个快速样式表,用于创建“常规”部分和“运送”部分(基于最初在问题中的HTML输出)。它使用了稍微不同的方法。
我的XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<xsl:template match="SDC_SN_1">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
<fo:region-body margin="1in" margin-top="1.5in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="General">
<fo:block font-weight="bold" text-decoration="underline" margin-top=".25in">General</fo:block>
<fo:table margin-top=".25in" margin-bottom=".25in">
<!-- border-style="solid" border-width="1pt" -->
<fo:table-column column-width="25%"/>
<fo:table-column column-width="75%"/>
<fo:table-body>
<fo:table-row>
<xsl:apply-templates select="Document_Number"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Order_Number"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Sell_to_Customer/Name"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Customer_Order_Number"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Customer_Order_Number2"/>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template match="General/Document_Number">
<fo:table-cell>
<fo:block>Document Number</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="General/Order_Number">
<fo:table-cell>
<fo:block>Order Number</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Sell_to_Customer/Name">
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="General/Customer_Order_Number">
<fo:table-cell>
<fo:block>Customer Reference</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="General/Customer_Order_Number2">
<fo:table-cell>
<fo:block>Purchase Order</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Shipping">
<fo:block font-weight="bold" text-decoration="underline" margin-top=".25in">Shipping</fo:block>
<fo:table margin-top=".25in" margin-bottom=".25in">
<!-- border-style="solid" border-width="1pt" -->
<fo:table-column column-width="25%"/>
<fo:table-column column-width="75%"/>
<fo:table-body>
<fo:table-row>
<xsl:apply-templates select="Ship_to_Customer/Name"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Ship_to_Customer/Additional_Name_Info"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Ship_to_Customer/Contact_Person"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Ship_to_Customer/Address"/>
</fo:table-row>
<fo:table-row>
<xsl:apply-templates select="Ship_to_Customer/Additional_Address_Info"/>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template match="Ship_to_Customer/Name">
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Ship_to_Customer/Additional_Name_Info">
<fo:table-cell>
<fo:block>Name 2</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Ship_to_Customer/Contact_Person">
<fo:table-cell>
<fo:block>Contact</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Ship_to_Customer/Address">
<fo:table-cell>
<fo:block>Address</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="Ship_to_Customer/Additional_Address_Info">
<fo:table-cell>
<fo:block>Address 2</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>: <xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:template>
</xsl:stylesheet>
如果您对样式表有任何其他帮助,或者您对我有任何疑问,请与我们联系。