0

是否可以通过 XSL 返回外部 PDF 文件的总页数?AntennaHouse Formatter 是否具有等效的扩展名?

提前致谢!

4

2 回答 2

2

如果您使用允许外部函数调用的基于 Java 的 XSLT 处理器(例如 Saxon PE 或 EE),那么 Apache PDFBox 将为您提供帮助。

PDFBox: https ://pdfbox.apache.org/

PDFBox 的 PDDocument 类具有返回目标 PDF 的页数的方法。因此,您可以通过以下步骤获取页数:

  1. 编写Java类和静态方法。
  2. 从 XSLT styleshhet 调用它。

[Java 示例代码]

package com.acme.pdfutil;
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
public class pdfDocument {
    /**
     * Get the page count of specified PDF file.
     * @param filePath 
     * @return Page count
     */
    public static int getPageCount(String filePath){
        File pdfFile = null;
        PDDocument pdfDoc = null;
        int pageCount = -1;
        try {
            pdfFile = new File(filePath);
            pdfDoc = PDDocument.load(pdfFile);
            pageCount = pdfDoc.getNumberOfPages();
        }
        catch (Exception e) {
            System.out.println("[getPageCount] " + e.getMessage());
        }
        finally {
            if (pdfDoc != null){
                try{
                    pdfDoc.close();
                }
                catch (Exception e) {
                    ;
                }
            }
        }
        return pageCount;
    }
}

[XSLT 样式表]

<xsl:stylesheet version="2.0" 
 xmlns:fo="http://www.w3.org/1999/XSL/Format" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:acmejava="java:com.acme.pdfutil.pdfDocument"
>
…
<!-- Call external function -->
<xsl:variable name=”pdfPageCount” as="xs:integer" select="acmejava:getPageCount($pdfPath)"/>
…
于 2016-07-14T12:41:05.017 回答
1

不是开箱即用,不。方法包括:

  • 使用可以报告页数的命令行工具,例如 pdftk ( https://www.pdflabs.com/tools/pdftk-server/ )。在运行 XSLT 创建 FO 之前,您可以在 PDF 上运行该工具并将结果保存到一个文件中,然后您将在 XSLT 处理期间读取该文件。
  • 不太可靠,您可以grep在 PDF 上使用等,并将其输出保存到要读取的文件中。参见,例如,http://www.unix.com/printthread.php?t=55661&pp=40
  • 如果您认为 XSLT 可以将您的所有 PDF 作为“未解析文本”读取,那么您可以unparsed-text()使用 XSLT 的正则表达式功能来读取 PDF 以查找正确的字符串。
  • 您可以在 XSLT 中使用 Print and Page Layout Community Group ( https://www.w3.org/community/ppl/wiki/XSLTExtensions ) 中的 XSLT 扩展从只包含您的 FO 文件中获取区域树外部PDF并计算其中的页数。
  • 在运行 XSLT 之前,您可以从 Antenna House(请参阅https://www.antennahouse.com/antenna1/ahpdfxml-conversion-library/)运行 AHPDFXML 以获取 PDF 的 XML 表示,然后您的 XSLT 可以计算该 XML 中的页面。
于 2016-07-13T14:58:10.837 回答