必须在 table 上指定最小、最佳或最大 IPD 中的至少一项
At least one of minimum, optimum, or maximum IPD must be specified on table
创建 PDF 时尝试使用 Fo.Net 执行渲染时出现此错误(标题)。
[MethodImpl(MethodImplOptions.Synchronized)]
public static void MakePdf(XmlDocument xslFoDocument, Stream outputStream)
{
FonetDriver driver = PdfPrinterDriver.InitFonetDriver();
driver.Render(xslFoDocument, outputStream);
}
我在这个主题上发现了另一个 post(针对 Java 而不是我正在使用的 C#,但我认为它是同一个错误,原因相同):At least one of minimum, optimum, or maximum IPD must be specified on table - XSL-FO Apache FOP.问题是我在下面的 xsl 文件中找不到任何未设置大小的地方。任何人都知道什么可能是错的?下面是完整的 XSL 样式表文件
编辑:经过进一步的故障排除后,我设法定位了导致抛出异常的 table。不过,我仍然看不出我错过了声明尺寸的地方。
<fo:table-column column-width="7cm"/>
<xsl:for-each select="$units">
<xsl:variable name="bgcolor">
<xsl:choose>
<xsl:when test="position() mod 2 = 0">white</xsl:when>
<xsl:otherwise>#F4F2F0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<fo:table-column background-color="{$bgcolor}"/>
</xsl:for-each>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell text-align="center">
<xsl:choose>
<xsl:when test="not(contains($hiddenGroups, 'image'))">
<fo:block margin-top="3mm" margin-left="4mm" margin-right="4mm" margin-bottom="-0.8mm">
<fo:external-graphic content-width="500mm" width="100%" src="{$apiurl}ImageFiles/{Attributes/Attribute[@id='Image']/FileInfo/@id}/Data?apikey={$apikey}"/>
</fo:block>
<fo:block background-color="white" font-weight="600" padding-top="2mm" padding-bottom="2mm" margin-left="4mm" margin-right="4mm" margin-bottom="3mm">
<xsl:value-of select="@name"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block background-color="white" font-weight="600" padding-top="2mm" padding-bottom="2mm" margin-top="3mm" margin-left="4mm" margin-right="4mm" margin-bottom="3mm">
<xsl:value-of select="@name"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
<xsl:for-each select="$general_attributes">
<xsl:variable name="attribute_id" select="@id"/>
<xsl:variable name="attribute_type" select="@attributeDefinitionType"/>
<xsl:if test="not(contains(@id, 'HIDE_COMP'))">
<fo:table-row keep-with-previous="always" border-bottom-style="solid" border-bottom-width="thin" border-bottom-color="#D0D0D0">
<fo:table-cell display-align="center" padding-top="2mm" padding-bottom="2mm">
<fo:block margin-left="2mm" margin-right="2mm">
<xsl:value-of select="@name"/>:
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell padding-top="2mm" padding-bottom="2mm" padding-left="4mm" padding-right="4mm" display-align="center" border-left-style="solid" border-right-style="solid" border-width="0.1mm" border-color="#D0D0D0">
<xsl:call-template name="show-attribute">
<xsl:with-param name="type" select="$attribute_type"/>
<xsl:with-param name="attribute" select="Attributes/Attribute[@id=$attribute_id]"/>
<xsl:with-param name="count" select="count($units)"/>
</xsl:call-template>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:if>
</xsl:for-each>
<xsl:if test="not(contains($hiddenGroups, 'Enkät'))">
<xsl:for-each select="$specific_attributes">
<xsl:variable name="attribute_id" select="@id"/>
<xsl:variable name="attribute_type" select="@attributeDefinitionType"/>
<xsl:if test="not(@group = preceding-sibling::*/@group)">
<fo:table-row>
<fo:table-cell padding-top="10mm" padding-bottom="5mm" number-columns-spanned="{1 + count($units)}">
<fo:block font-size="13" font-weight="bold" color="white" background-color="#0191ac" padding-top="2mm" padding-bottom="1.5mm" margin-bottom="2mm">
<fo:inline padding-left="4mm"><xsl:value-of select="@group"/></fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
<fo:table-row keep-with-previous="always" border-bottom-style="solid" border-bottom-width="thin" border-bottom-color="#D0D0D0">
<fo:table-cell display-align="center" padding-top="2mm" padding-bottom="2mm">
<fo:block margin-left="2mm" margin-right="2mm">
<xsl:value-of select="@name"/>
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell padding-top="2mm" padding-bottom="2mm" padding-left="4mm" padding-right="4mm" display-align="center" border-left-style="solid" border-right-style="solid" border-width="0.1mm" border-color="#D0D0D0">
<xsl:call-template name="show-attribute">
<xsl:with-param name="type" select="$attribute_type"/>
<xsl:with-param name="attribute" select="Attributes/Attribute[@id=$attribute_id]"/>
<xsl:with-param name="count" select="count($units)"/>
</xsl:call-template>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</xsl:if>
</fo:table-body>
</fo:table>
我将其标记为已回答并参考@lfurini 的第一条评论。至于最后一个问题@lfurini,当我认为我已经设置了 table 宽度时,我看到了错误的 table。因此,总结一下其他人也对此感到疑惑;如果在 fo:table 中设置了宽度,只需在其中一列上设置宽度,其余的将自动调整。
创建 PDF 时尝试使用 Fo.Net 执行渲染时出现此错误(标题)。
[MethodImpl(MethodImplOptions.Synchronized)]
public static void MakePdf(XmlDocument xslFoDocument, Stream outputStream)
{
FonetDriver driver = PdfPrinterDriver.InitFonetDriver();
driver.Render(xslFoDocument, outputStream);
}
我在这个主题上发现了另一个 post(针对 Java 而不是我正在使用的 C#,但我认为它是同一个错误,原因相同):At least one of minimum, optimum, or maximum IPD must be specified on table - XSL-FO Apache FOP.问题是我在下面的 xsl 文件中找不到任何未设置大小的地方。任何人都知道什么可能是错的?下面是完整的 XSL 样式表文件
编辑:经过进一步的故障排除后,我设法定位了导致抛出异常的 table。不过,我仍然看不出我错过了声明尺寸的地方。
<fo:table-column column-width="7cm"/>
<xsl:for-each select="$units">
<xsl:variable name="bgcolor">
<xsl:choose>
<xsl:when test="position() mod 2 = 0">white</xsl:when>
<xsl:otherwise>#F4F2F0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<fo:table-column background-color="{$bgcolor}"/>
</xsl:for-each>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell text-align="center">
<xsl:choose>
<xsl:when test="not(contains($hiddenGroups, 'image'))">
<fo:block margin-top="3mm" margin-left="4mm" margin-right="4mm" margin-bottom="-0.8mm">
<fo:external-graphic content-width="500mm" width="100%" src="{$apiurl}ImageFiles/{Attributes/Attribute[@id='Image']/FileInfo/@id}/Data?apikey={$apikey}"/>
</fo:block>
<fo:block background-color="white" font-weight="600" padding-top="2mm" padding-bottom="2mm" margin-left="4mm" margin-right="4mm" margin-bottom="3mm">
<xsl:value-of select="@name"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block background-color="white" font-weight="600" padding-top="2mm" padding-bottom="2mm" margin-top="3mm" margin-left="4mm" margin-right="4mm" margin-bottom="3mm">
<xsl:value-of select="@name"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
<xsl:for-each select="$general_attributes">
<xsl:variable name="attribute_id" select="@id"/>
<xsl:variable name="attribute_type" select="@attributeDefinitionType"/>
<xsl:if test="not(contains(@id, 'HIDE_COMP'))">
<fo:table-row keep-with-previous="always" border-bottom-style="solid" border-bottom-width="thin" border-bottom-color="#D0D0D0">
<fo:table-cell display-align="center" padding-top="2mm" padding-bottom="2mm">
<fo:block margin-left="2mm" margin-right="2mm">
<xsl:value-of select="@name"/>:
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell padding-top="2mm" padding-bottom="2mm" padding-left="4mm" padding-right="4mm" display-align="center" border-left-style="solid" border-right-style="solid" border-width="0.1mm" border-color="#D0D0D0">
<xsl:call-template name="show-attribute">
<xsl:with-param name="type" select="$attribute_type"/>
<xsl:with-param name="attribute" select="Attributes/Attribute[@id=$attribute_id]"/>
<xsl:with-param name="count" select="count($units)"/>
</xsl:call-template>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:if>
</xsl:for-each>
<xsl:if test="not(contains($hiddenGroups, 'Enkät'))">
<xsl:for-each select="$specific_attributes">
<xsl:variable name="attribute_id" select="@id"/>
<xsl:variable name="attribute_type" select="@attributeDefinitionType"/>
<xsl:if test="not(@group = preceding-sibling::*/@group)">
<fo:table-row>
<fo:table-cell padding-top="10mm" padding-bottom="5mm" number-columns-spanned="{1 + count($units)}">
<fo:block font-size="13" font-weight="bold" color="white" background-color="#0191ac" padding-top="2mm" padding-bottom="1.5mm" margin-bottom="2mm">
<fo:inline padding-left="4mm"><xsl:value-of select="@group"/></fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
<fo:table-row keep-with-previous="always" border-bottom-style="solid" border-bottom-width="thin" border-bottom-color="#D0D0D0">
<fo:table-cell display-align="center" padding-top="2mm" padding-bottom="2mm">
<fo:block margin-left="2mm" margin-right="2mm">
<xsl:value-of select="@name"/>
</fo:block>
</fo:table-cell>
<xsl:for-each select="$units">
<fo:table-cell padding-top="2mm" padding-bottom="2mm" padding-left="4mm" padding-right="4mm" display-align="center" border-left-style="solid" border-right-style="solid" border-width="0.1mm" border-color="#D0D0D0">
<xsl:call-template name="show-attribute">
<xsl:with-param name="type" select="$attribute_type"/>
<xsl:with-param name="attribute" select="Attributes/Attribute[@id=$attribute_id]"/>
<xsl:with-param name="count" select="count($units)"/>
</xsl:call-template>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</xsl:if>
</fo:table-body>
</fo:table>
我将其标记为已回答并参考@lfurini 的第一条评论。至于最后一个问题@lfurini,当我认为我已经设置了 table 宽度时,我看到了错误的 table。因此,总结一下其他人也对此感到疑惑;如果在 fo:table 中设置了宽度,只需在其中一列上设置宽度,其余的将自动调整。